中元素的Jquery选择器

我们使用jQuery来解析一些HTML。 然后我需要遍历该文档并找到一些元素。 在我需要找到的元素中,有元素。

这非常适合提取所有元素:

 $(string).find("a") 

但是这不能解压缩元素:

 $(string).find("link") 

string参数是html内容(例如,在请求时接收)。

知道为什么吗? (我猜这个find只适用于元素)。 另外,关于如何实际提取这些元素的任何想法?

从你用于$(string)的函数的文档 (这是函数jQuery( html, [ownerDocument] ) ):

传递复杂的HTML时,某些浏览器可能无法生成完全复制所提供的HTML源的DOM。 如上所述,我们使用浏览器的.innerHTML属性来解析传递的HTML并将其插入到当前文档中。 在此过程中,某些浏览器会过滤掉某些元素,例如元素。 因此,插入的元素可能无法代表传递的原始字符串。

尽量不要使用jQuery来操作整个 HTML文档。

特别要注意,HTML的独立片段中的link节点可以“找到” 。

好吧,根据我在jQuery源代码中可以找到的内容,引擎本身不会创建没有“正确就位”的标签(或片段)。 即使传递字符串,jQuery也会识别出已经提供了标头,并且不会生成它。

毕竟,当jQuery传递一串HTML时,它实际上调用了document.createElement并创建了这些元素的数组列表。

编辑 :经过一番调查,看起来它是浏览器实际限制元素创建,而不是jQuery。 无论哪种方式,你都会留下缺席的标签。 这让我在下面得出了同样的结论。

尽管我不喜欢它,但可能是正则表达式/字符串操作的时候了。

jQuery不能这样做,但是你的浏览器可以:(不要尝试用正如someome所建议的正则表达式来解析HTML。)

 txt = '
ajelo
'; if(window.DOMParser) { parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,"text/xml"); } else { // Internet Explorer xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(txt); } xmlDoc.getElementsByTagName('LINK');

请注意,XML区分大小写,因此您需要使用与HTML中相同的大小写来搜索“LINK”。

像@pimvdb指出的那样,这不起作用:

 alert($("
Test
").find("link").text());

解释是对的:

Sizzle使用context.getElementsByTagName,因为元素不在DOM中而失败。

但这种方式有效:

 alert(("link", $("
Test
")).text());

对于一些说第二个不起作用的人: http : //jsfiddle.net/ErickPetru/5Qs3M/ 。 但是当然它显然没有找到不在DOM上的元素(即在head )。