用于<link />元素的Jquery选择器

时间:2011-06-20 20:34:52

标签: jquery dom

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

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

$(string).find("a")

但这不能提取<link>元素:

$(string).find("link")

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

知道为什么吗? (我想find仅适用于<body>元素。另外,关于如何实际提取这些<link>元素的任何想法?

4 个答案:

答案 0 :(得分:8)

来自您$(string)所用功能的the documentation(函数jQuery( html, [ownerDocument] )):

  

传递复杂的HTML时,有些   浏览器可能无法生成DOM   完全复制HTML源代码   提供。如上所述,我们使用   浏览器的.innerHTML属性要解析   传递的HTML并将其插入到   目前的文件。 在此过程中,   一些浏览器过滤掉某些   <html><title>或其他元素   <head>元素。因此,   插入的元素可能不是   代表原始字符串   过去了。

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

请特别注意,HTML can be "found" just fine的独立摘要中的link节点。

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

txt = '<DIV><LINK>a</LINK><B>jelo</B></DIV>';

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”。

答案 3 :(得分:-2)

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

alert($("<div><link>Test</link></div>").find("link").text());

解释是对的:

  

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

但这种方式有效:

alert(("link", $("<div><link>Test</link></div>")).text());

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