2010-07-14 104 views
0

是否可以在jQuery API或DOM中检查页面上是否存在元素?如何区分生成元素和选定元素之间的区别?

考虑以下两个变量:

var selected = $('span#mySpan'); 
var created = $('<span id="mySpan">Testing</span>'); 

双方将返回包含跨度元素的jQuery对象。有没有什么办法可以告诉第一个存在于页面上,而第二个不存在?

回答

2

尝试

$(created).parents("html").length 

这里有一些更多的方式做同样的:

$(document).find(created).length 
$(created).parents(document).length 

或者使用被此任务建造的contains方法。它只接受DOM节点,所以我们需要从jQuery解开它反对

$.contains(document, created.get(0)) 

纯DOM方法将使用Node.compareDocumentPosition方法。在上面的例子中,

// get the DOM node 
var createdNode = created.get(0); 
var position = document.compareDocumentPosition(createdNode); 
var isNotInDocument = (position & Node.DOCUMENT_POSITION_DISCONNECTED) != 0; 
+0

美丽简洁明了:) – 2010-07-14 19:02:53

+0

它是简单的,但不是防呆:)考虑一个节点'p'内'$(“

你好

”)'将返回1 – Anurag 2010-07-14 19:08:57

+0

我能活接着就,随即;如果他们正在生成第二个Html和Body,那么事情应该打破;-) – 2010-07-14 19:15:49

0

从某种延伸到底层DOM API的我能想到这样做的唯一途径,一边是获取整个DOM树的副本,然后做对的比较它。

在你的例子中,你的第二个跨度是不是没有父对象?在有效的HTML中,跨度应始终有父级。只要这样的规则,假设有效的HTML/XHTML,可能是有用的。

相关问题