<link>
元素。这可以完美地用来提取所有
<a>
元素:$(string).find("a")
但是这种方法不能提取 <link>
元素:
$(string).find("link")
“string”参数是HTML内容(例如在请求中接收到的内容)。
有什么想法吗?(我猜“find”只适用于“<body>”元素)。还有,有没有关于如何实际提取这些“<link>”元素的想法?
根据我在jQuery源代码中找到的内容,引擎本身不会创建未“正确安装”的标签(或片段)。即使传递一个字符串,jQuery也会识别到标题已经被提供,并且不会生成它。
毕竟,当jQuery传递HTML字符串时,它实际上是调用document.createElement
并创建这些元素的数组列表。
编辑:经过更多的调查,看起来限制元素创建的实际上是浏览器,而不是jQuery。无论哪种方式,你都会缺少标签。这就带我回到了下面的结论。
尽管我不喜欢这样做,但现在可能是使用正则表达式/字符串操作的时候了。
jQuery无法完成,但是您的浏览器可以:(不要像某些人建议的那样尝试使用正则表达式来解析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”。
就像 @pimvdb 所指出的那样,这个不起作用:
alert($("<div><link>Test</link></div>").find("link").text());
解释是正确的:
Sizzle使用context.getElementsByTagName,但由于元素不在DOM中,因此失败。
但这种方式可以工作:
alert(("link", $("<div><link>Test</link></div>")).text());
head
中的元素)。$
,因此根本没有使用 link
选择器。 - pimvdbcontext.getElementsByTagName
,但由于元素不在DOM中,因此失败。此外,<link>
不能包含像这样的文本,因为它从未保持过这样的innerHTML
。 - pimvdb<Link>
标签不应该有那样的内容。jQuery似乎会将其剥离。 - davidinnerText
,问题就是简单地解释了标签不会出现在文档中,因此无法被定位。 - Erick Petrucelli
string
中有什么? - BoltClock$('link')
从广义上讲运作良好,所以这似乎不是一个问题。 - josh.trow$('<html><head><link rel="1"></head><body><p name="john">John</p></body></html>')
返回[<link rel="1">, <p name="john">John</p>]
,但是$('<html><head><link rel="1"></head><body><p name="john">John</p></body></html>').find('p')
却什么也没有。 - josh.trow