中元素的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
)。