从那起,我已经对这些方法做了大量的研究,并且已经在很多场合使用他们。在很多任务中,他们被证明是非常有用的(特别关于结构的抽象 DOM 选择器)。
1、DOMElement.contains(DOMNode)
这个方法起先用在 IE ,用来确定 DOM Node 是否包含在另一个 DOM Element 中。
当尝试优化 CSS 选择器遍历(像:“#id1 #id2”),这个方法很有用。你可以通过 getElementById 得到元素,然后使用 .contains() 确定 #id1 实际上是否包含 #id2。
注意点:如果 DOM Node 和 DOM Element 相一致,.contains() 将返回 true ,虽然,一个元素不能包含自己。
这里有一个简单的执行包装,可以运行在:Internet Explorer, Firefox, Opera, and Safari。
function contains(a, b) {
return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(arg) & 16);
}
2、NodeA.compareDocumentPosition(NodeB)
这个方法是 DOM Level 3 specification 的一部分,允许你确定 2 个 DOM Node 之间的相互位置。这个方法比 .contains() 强大。这个方法的一个可能应用是排序 DOM Node 成一个详细精确的顺序。
使用这个方法你可以确定关于一个元素位置的一连串的信息。所有的这些信息将返回一个比*(Bit,比特,亦称二进制位)。
对于那些,人们知之甚少。比*是将多重数据存储为一个简单的数字(译者注:0 或 1)。你最终打开 / 关闭个别数目(译者注:打开/关闭对应 0 /1),将给你一个最终的结果。
这里是从 NodeA.compareDocumentPosition(NodeB) 返回的结果,包含你可以得到的信息。
Bits Number Meaning
000000 0 元素一致
000001 1 节点在不同的文档(或者一个在文档之外)
000010 2 节点 B 在节点 A 之前
000100 4 节点 A 在节点 B 之前
001000 8 节点 B 包含节点 A
010000 16 节点 A 包含节点 B
100000 32 浏览器的私有使用
现在,这意味着一个可能的结果类似于:
复制代码 代码如下:
<div id="a">
<div id="b"></div>
</div>
<script>
alert( document.getElementById("a").compareDocumentPosition(document.getElementById("b")) == 20);
</script>
一旦一个节点 A 包含另一个节点 B,包含 B(+16) 且在 B 之前(+4),则最后的结果是数字 20 。如果你查看比特发生的变化,将增加你的理解。
000100 (4) + 010000 (16) = 010100 (20)
这个,毫无疑问,有助于理解单个最混乱的 DOM API 方法。当然,他的价值当之无愧的。
现在,DOMNode.compareDocumentPosition 在 Firefox 和 Opera 中是可用的。然而,有一些技巧,我们可以用来在 IE 中执行他。
复制代码 代码如下:
// Compare Position - MIT Licensed, John Resig
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)。
这个函数可以在 Internet Explorer、Firefox 和 Opera 中运行。但在 Safari 中却有残缺功能(因为他只有 contains() 方法,而没有 .sourceIndex 属性。我们只能得到 包含(+16),被包含(+8),其他的所有结果都将返回(+1)代表一个断开)。
PPK 提供了一个关于通过创建一个 getElementsByTagNames 方法使新功能可以被使用的很棒的例子。让我们改编他到我们的新方法中:
复制代码 代码如下:
// Original by PPK quirksmode.org
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);
});
}
我们现在可以使用他来按次序构建一个站点的目录:
getElementsByTagNames("h1, h2, h3");
虽然 Firefox 和 Opera 都采取了一些主动落实这一方法。我依然期待看到更多的浏览器进入,以帮助向前推动
相关推荐:
如何用AI写公众号文章?让创作更高效、更轻松
SEO优化的话题:助力企业成功的关键,夏杰ai智能管家
seo资源指的是什么,seo资料 ,绿眼AI
SEO实际:如何在竞争激烈的市场中脱颖而出,dz论坛seo如何设置
优化提长:让企业效能提升的秘密武器,长沙网站建设创意
ChatGPT的破解版:AI世界的新突破,ai无禁忌
文字生成AI:开启创意写作的新纪元
OpenAI注册问题解决方案:如何顺利通过手机号验证,反对ai头像
seo要懂些什么,seo主要做什么的 ,小艾艾AI
专业SEO方案助力企业网站流量暴增,精准引流不再是难题,网站建设合同4篇
SEO优化做什么的?揭秘SEO优化的核心价值与实战应用,ai做金色
360ai问答-智能时代的全能助手,未来的智慧生活,ai生成白底
SEO每日:提高网站流量的秘密武器,助你脱颖而出,seo优化和排名技巧
创作新时代:自动生成文章AI的魅力与未来
什么是seo发外链,seo外链类型有哪些 ,小小苏ai
SEO优化知识全解析:提升网站排名的秘密武器,ai出错合集
如何通过AI写文章,轻松提高写作效率与质量
seo要公司什么资源,做seo需要用到什么软件 ,ai明星换了
SEO技巧提升网站流量和排名,助力企业快速崛起,ai080206.
智能AI写文章:高效创作新风尚
seo网站代码是什么,网站专业术语中seo意思是什么 ,拟人ai制作
优化综合:引领高效发展的智慧之道,电影营销的推广方式
ChatGPT翻译打不开?解决方法!,ai爱股票
为什么行业都要做seo,为什么要做seo ,ai明信片
AI智能软件:未来科技的核心力量
ChatGPT显示503:如何应对AI服务不可用的困境?,ai宝贝宝贝
SEO优化与SEM广告:提升品牌曝光与流量的双重利器,ai接回头
ChatGPT崩一次多久修复?揭秘背后的技术与保障,ai1818818
怎么让AI润色文章,让写作更轻松?
什么是秀米?全方位了解这款微信公众号排版神器,宁波全网营销型网站建设
SEO目标:让您的网站轻松登顶搜索引擎,优化购物网站的搜索
文字生成AI开启创作的新纪元
ChatGPT:OpenAI的创新之作-一款颠覆传统的语言模型,ai球衣号
seo诊断什么意思,seo诊断a5 ,约瑟夫ai
未来科技:AI工具为生活赋能,打造智能未来
ChatGPT:打破语言障碍,理解与沟通的新时代,交通轨道ai
自动写文章AI:高效创作工具,开启写作新纪元
SEO软优化:助力网站实现流量爆发的秘密武器,延平区网页seo
AI智能时代的到来:如何利用人工智能推动生活与商业创新,ai相册下载
SEO与网络推广机构:如何选择最适合你的数字营销合作伙伴,ai写作软件性价比高吗
seo深度优化插件是什么,深度优化手机软件 ,ai的缩写
ChatPartner无法连接网络?解决方案,让你的聊天体验更顺畅!,如何用ai给自己写作文
ChatGDP人工智能:未来科技赋能企业与个人的智能变革,如何用AI绘制人体
《收录情况:数字时代的网络信息检索与价值体现》,山东全域营销推广软件客服电话
AI搜索写文章:一丝丝智慧背后的无限可能,电脑免费ai写作神器
ChatGPT界面看不到用户:隐秘的互动方式与智慧的背后,AI和UR
SEO字:如何通过精准关键词提升网站流量与排名,赣州于都网站推广
SEO需要:如何提升网站排名,打造高效营销利器,seo怎么推广关键词
SEO优化快:如何在短时间内实现网站流量爆发,Lacey0508ai
SEO包月服务:助力企业提升网站排名与流量的长期利器,网站建设流程 报读文库