自昨天以来,我一直在玩这个问题。我似乎无法找到解决方案。
问题:
<ul>
<li>Cats</li>
<li>Dogs</li>
<li>Bats</li>
<li>Ogre</li>
</ul>
希望使用javascript / jQuery将文档准备好时将上述无序列表保存到数组中。
使用
执行此操作someArray = $("ul").children()
在Internet Explorer 8中的$(document).ready()上,该数组将具有li元素但没有innerHTML
就像
<li></li>
<li></li>
...
所以我想我可以将子节点保存到函数myFunc()中的全局数组中。这将确保所有内容都已加载。
/* Global Variable */
var someArray = null;
/* function to be called*/
function myFunc() {
if (someArray == null) someArray = $("ul").children()
result = someArray with elements from index 0 and n-2
$("ul").html();
$.each(result, function() {
$("ul").append(this)
}
}
以上代码适用于chrome和firefox。每次调用myfunc时,新的无序列表将只包含猫和狗。
然而,在IE上,似乎用$(“ul”)改变无序列表.html()也改变了someArray。它适用于第一次调用,但在第二次调用时,它将从当前UL中拉出元素列表
原始元素:猫,狗蝙蝠, 食人魔第一次打电话给IE:猫,狗, 第二次调用IE:空数组
我确实尝试使用$ .extend克隆数组,但它似乎没有帮助。有没有办法可以保存原始UL中的子节点列表,而不是通过IE更改它们?
当我将子节点保存到数组
时,似乎IE使用指针引用答案 0 :(得分:2)
目前还不清楚你实际上要做什么,但如果你的目标是将这些元素的内容放到一个数组中,那么清除列表,这是一种方法:
// Grab the animals
var animals = [];
$("ul:first").children().each(function() {
animals.push(this.innerHTML);
});
// Wipe out the list
$("ul").html("");
// Show the result
var index;
for (index = 0; index < animals.length; ++index) {
display("animals[" + index + "] = '" + animals[index] + "'");
}
在那个例子中,我只是抓住文档中的第一个ul
;显然你想要使用更合适的选择器。
如果您真的想要克隆元素,可以使用DOM cloneNode
函数或jQuery的包装器clone
:
// Grab the animal elements
var animals = [];
$("ul:first").children().each(function() {
animals.push(this.cloneNode(true));
});
// Wipe out the list
$("ul").html("");
// Show the result
var index;
for (index = 0; index < animals.length; ++index) {
display("animals[" + index + "] = '" + animals[index].innerHTML + "'");
}
答案 1 :(得分:0)
以更简洁的方式:
var animals = $("ul").children().map(function(){
return $(this).text();
}).get();
alert(animals);
我认为您的问题是您的原始代码指向原始列表,而您正在其他位置更改它。