contains和compareDocumentPosition 确定是否HTML节点间的相关
副问题[/!--empirenews.page--]
一个很棒的 blog 文章,是 PPK 两年前写的,文章中表明白 contains() 和 compareDocumentPosition() 要领运行在他们各自的赏识器上。从那起,我已经对这些要领做了大量的研究,而且已经在许多场所行使他们。在许多使命中,他们被证明长短常有效的(出格关于布局的抽象 DOM 选择器)。 return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(arg) & 16); } 2、NodeA.compareDocumentPosition(NodeB) <div id="b"></div> </div> <script> alert( document.getElementById("a").compareDocumentPosition(document.getElementById("b")) == 20); </script> 一旦一个节点 A 包括另一个节点 B,包括 B(+16) 且在 B 之前(+4),则最后的功效是数字 20 。假如你查察比特产生的变革,将增进你的领略。 function comparePosition(a, b){ return a.compareDocumentPosition ? a.compareDocumentPosition(b) : a.contains ? ( a != b && a.contains(b) && 16 ) + ( a != b && b.contains(a) && 8 ) + ( a.sourceIndex >= 0 && b.sourceIndex >= 0 ? (a.sourceIndex < b.sourceIndex && 4 ) + (a.sourceIndex > b.sourceIndex && 2 ) : 1 ) : 0; } IE 提供应我们一些可以行使的要领和属性。开始,行使 .contains() 要领(如我们前面所接头的),以便给我们包括(+16)可能被包括(+8)的功效。IE 尚有一个 .sourceIndex 属性在全部的 DOM Element 对应着元素在文档中的位置,譬喻:document.documentElement.sourceIndex == 0。由于我们有这个信息,我们可以完成两个 compareDocumentPosition 困难:在前面(+2)和在后头(+4)。其它,假如一个元素不在当前的文档,.sourceIndex 将便是 -1,这个给我们其它一个答复(+1)。最后,通过这个进程的揣度,我们可以确定假如一个元素便是他自己,返回一个空的比特码(+0)。 function getElementsByTagNames(list, elem) { elem = elem || document; var tagNames = list.split(’,’), results = []; for ( var i = 0; i < tagNames.length; i++ ) { var tags = elem.getElementsByTagName( tagNames[i] ); for ( var j = 0; j < tags.length; j++ ) results.push( tags[j] ); } return results.sort(function(a, b){ return 3 - (comparePosition(a, b) & 6); }); } (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |