Javascript 修改类名后,节点引用丢失
通过node.className=…更改类名后,我丢失了对象引用Javascript 修改类名后,节点引用丢失,javascript,Javascript,通过node.className=…更改类名后,我丢失了对象引用 var nodeName = 'my_div'; var subNode = document.getElementById(nodeName); var nodes = subNode.getElementsByClassName('one'); alert (nodes[0]); // OK - [object HTMLSpanElement] nodes[0].setAttribute('class','zzz'); ale
var nodeName = 'my_div';
var subNode = document.getElementById(nodeName);
var nodes = subNode.getElementsByClassName('one');
alert (nodes[0]); // OK - [object HTMLSpanElement]
nodes[0].setAttribute('class','zzz');
alert (nodes[0]); // Undefined
如何将对对象的引用保存在变量中?因为返回的是一个实时集合,这意味着对原始dom元素属性的任何更改都将反映在列表中
您可以使用类似的方法来返回非活动的元素集
var nodes = subNode.querySelectorAll('.one');
QSA是一个很好的建议。分别:如果需要将活动节点列表转换为数组:
var a=array.prototype.slice.call(节点列表,0)
QSA也是一个很好的建议,因为它出现在IE8上,而getElementsByClassName
没有。(顺便说一句,这是我孤独的+1)但有一件事值得注意:尽管很少有人会在意,getElementsByClassName
(及其支持更好的表亲getElementsByTagName
)比QSA快得多,甚至可以将结果转换为数组:这可能有两个原因:1。由于CSS的原因,浏览器可能已经有了类/标记列表。QSA必须启动一个完整的CSS选择器解析器。@T.J.Crowder感谢您的基准测试。。。我从未测试过性能差异