【发布时间】:2013-09-07 03:36:04
【问题描述】:
我为下面无序列表的childNodes创建了一个NodeList
<body>
<ul id="win" >win
<li id="aa0">text</li>
<li id="aa1"></li>
<li id="aa2"></li>
<li id="aa3"></li>
<li id="aa4"></li>
<li id="aa5"></li>
</ul>
</body>
我创建了一个元素 id 数组,我想将 NodeList 与它进行比较
['aa0','aa1,'aa7','aa8']
我使用以下 javascript(如下)将 NodeList 与 Array 进行比较。 目标是确定数组中的哪些元素已经在 DOM 中或需要添加到 DOM 中...并确定当前在 DOM 中的哪些元素需要删除,以便我可以附加 UL 以仅包含id 在数组中。
function nodeinfo(){
//these are the ids that we want in the ul
var ids=['aa0','aa1','aa7','aa8']
var node=document.getElementsByTagName('ul')[0];
var nodelist=node.childNodes;
//test to see if array ids are in nodelist
for(var j=0;j<ids.length;j++){
if(document.getElementById(ids[j])){alert(ids[j]+" is here, keep")}
else{alert(ids[j]+" is not here, add")}
}
//test to see if nodelist ids are in array
for(var j=0;j<nodelist.length;j++){
if(nodelist[j].id != undefined){
var tempi=0
for(var k=0;k<ids.length;k++){
if(nodelist[j].id === ids[k]){tempi++}
}
if (tempi !=1){alert(nodelist[j].id+" is unwanted, remove")}
}
}
}
目前我只是在我将引用附加结构的地方显示警报。 请注意,我对此很陌生。我知道 NodeList 的行为不像数组,在此函数中间调整 DOM 会改变 NodeList 并可能搞砸一切。
我的问题是:这似乎有点笨重,是否有更简洁或更强大的方法来实现这个目标?正如我在这里展示的那样,尝试基于数组调整 DOM 结构是否存在任何固有的危险?
请不要使用 jquery。
感谢您的帮助
【问题讨论】:
-
您需要支持哪些浏览器?如果您可以避免使用旧的 IE,那么
Array.filter之类的内容会有所帮助 -
至少IE8及以上...但更喜欢IE6
-
出于好奇,为什么没有jquery? (特别是如果您计划支持 IE6-8。)
-
如果您需要确定哪些项目需要在 DOM 中,哪些需要从 DOM 中删除(准确复制 id 数组),您最好只运行 ID 数组并每次创建一个新列表。最终结果相同,逻辑更少。
-
我处于学习模式,所以我更喜欢使用纯javascript而不是jquery。
标签: javascript html arrays dom