2010-07-26 77 views
8

我想能够有一个javascript函数,为我隐藏divs。例如,我有一些像javascript隐藏divs

<div id='container'> 
    <div class='item'></div> 
    <div class='item'></div> 
    <div class='item'></div> 
    <div class='item'></div> 
    <div class='item'></div> 
</div> 

,我想隐藏每一个“项目”类元素的功能说的第3后,我将如何去吗?

感谢所有帮助

回答

8

在JS,你可以做这样的事情,提供的项目的div是容器div的独生子女:

var itemDivs = document.getElementById("container").children; 
for(var i = 0; i < itemDivs.length; i++) { 
    if(i > 2) { 
     itemDivs[i].style.display = 'none'; 
    } 
} 

这里试试:http://jsfiddle.net/eY9ZD/

否则,你可以这样做:

var divs = document.getElementById("container").getElementsByTagName("div"); 
for(var i = 0; i < itemDivs.length; i++) { 
    if(i > 2 && divs[i].className == 'item') { 
     itemDivs[i].style.display = 'none'; 
    } 
} 

试试看吧再次:http://jsfiddle.net/6TcWE/

最后,如果jQuery是一个选项,有使用gt选择一个班轮:

$("#container div.item:gt(2)").hide(); 

这里试试:

+1

不要忘了你需要使用jQuery库来使用这种方法。 – 2010-07-26 15:52:42

1

您可以用jQuery做到这一点很容易,但你的标签不包括,所以我要告诉你一个香草的Javascript方式:

var divs = document.getElementById('container').getElementsByTagName('div'); 
var numItemDivs = 0; 
for (var i=0; i<divs.length; i++) { 
    if (divs[i].className == "item") { 
    numItemDivs++; 
    if (numItemDivs > 2) { 
     divs[i].style.display = "none"; 
    } 
    } 
} 
1

如果你只是使用常规JavaScript的你可以做这样的事情:

var container = document.getElementById("container"); 
var items = container.childNodes; 
for(var i = 0; i < items.length; i++){ 
    if(i >= 3) 
     items[i].style.display = "none"; 
} 
+1

请注意,'childNodes'将返回每个孩子,也是文本节点。 – 2010-07-26 15:59:28

5

用普通的JavaScript是这样的:

function hideElements(elements, start) { 
    for(var i = 0, length = elements.length; i < length;i++) { 
     if(i >= start) { 
      elements[i].style.display = "none"; 
     } 
    } 
} 

然后,你可以这样做:

var elements = document.getElementById('container').getElementsByClassName('item'); 
hideElements(elements , 3); 

参考:getElementByIdgetElementsByClassName

更新:

有趣的是,IE8似乎支持功能更强大的querySelectorAll()功能。所以,如果你不关心< IE8,那么你也可以这样做:

var elements = document.querySelectorAll('#container .item'); 
hideElements(elements , 3); 

不幸的是,不是“一个”解决方案,选择在所有的浏览器需要的元素。如果你不想考虑跨浏览器的兼容性,可以考虑使用@karim建议的jQuery。

+1

不幸的是,包括IE8在内的IE不支持getElementsByClassName:http://www.quirksmode.org/dom/w3c_core.html#fivemethods – Robusto 2010-07-26 16:04:38

+0

@Robusto:哦,我不知道。那么它取决于HTML,也许'孩子'就足够了。 – 2010-07-26 16:06:05

1

如果你正在寻找一个纯粹的JavaScript实现,这应该工作;它也只会隐藏DIV子节点。

function hideMe(){ 
    var item_list = document.getElementById('container').children; 
    for(var i = 0; i < item_list.length; i++){ 
     if(i > 2 && item_list[i].tagName == "DIV"){ 
      item_list[i].style.display = "none"; 
     } 
    } 
} 

编辑:改变风格从可见性到显示,你可能不希望布局空间挥之不去。