Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修改类名后,节点引用丢失_Javascript - Fatal编程技术网

Javascript 修改类名后,节点引用丢失

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

通过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');
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感谢您的基准测试。。。我从未测试过性能差异