<;的Jquery选择器;链接>;<;头>;
我们使用jQuery解析一些HTML。然后我需要遍历该文档并找到一些元素。在我需要查找的元素中,有<;的Jquery选择器;链接>;<;头>;,jquery,dom,Jquery,Dom,我们使用jQuery解析一些HTML。然后我需要遍历该文档并找到一些元素。在我需要查找的元素中,有元素 这可以很好地提取所有元素: $(string).find("a") 但这无法提取元素: $(string).find("link") 字符串参数是html内容(例如,根据请求接收) 知道为什么吗?(我猜find只适用于元素)。另外,关于如何实际提取这些元素,有什么想法吗?就像@pimvdb指出的那样,这是行不通的: alert($("<div><link>Test&
元素
这可以很好地提取所有
元素:
$(string).find("a")
但这无法提取
元素:
$(string).find("link")
字符串
参数是html内容(例如,根据请求接收)
知道为什么吗?(我猜
find
只适用于
元素)。另外,关于如何实际提取这些
元素,有什么想法吗?就像@pimvdb指出的那样,这是行不通的:
alert($("<div><link>Test</link></div>").find("link").text());
警报($(“测试”).find(“链接”).text();
解释是正确的:
Sizzle使用context.getElementsByTagName,这会失败,因为元素不在DOM中
但这种方法是有效的:
alert(("link", $("<div><link>Test</link></div>")).text());
alert((“链接”、“测试”).text();
对于一些说第二种方法不起作用的人来说:。但是当然,它显然找不到不在DOM上的元素(即头部)。好吧,根据我在中找到的,引擎本身不会创建没有“正确放置”的标记(或片段)。即使在传递字符串时,jQuery也会识别已提供的标头,并且不会生成它
毕竟,当jQuery被传递一个HTML字符串时,它实际上调用了document.createElement
,并创建了这些元素的数组列表
编辑:经过进一步调查,看起来是浏览器限制了元素的创建,而不是jQuery。无论哪种方式,你都没有标签。这让我得出了下面相同的结论
尽管我不喜欢它,但可能是时候对regex/string进行操作了。来自您用于$(string)
(这是函数jQuery(html,[ownerDocument])
):
当传入复杂的HTML时,有些
浏览器可能不会生成
完全复制HTML源代码
假如如前所述,我们使用
要分析的浏览器的.innerHTML属性
传递的HTML并将其插入
当前文件在这个过程中,
有些浏览器会过滤掉某些内容
元素,如
,
,或
元素。因此
插入的元素可能不可用
原始字符串的代表
通过了
尽量不要使用jQuery来处理整个HTML文档
请特别注意,独立HTML片段中的链接节点。jQuery无法做到这一点,但您的浏览器可以做到:(不要像某些人建议的那样尝试使用正则表达式解析HTML。)
txt='ajelo';
if(window.DOMParser){
parser=新的DOMParser();
xmlDoc=parser.parseFromString(txt,“text/xml”);
}else{//Internet Explorer
xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async=“false”;
xmlDoc.loadXML(txt);
}
getElementsByTagName('LINK');
请注意XML是区分大小写的,因此您需要使用与HTML中相同的大小写来搜索“链接”。字符串变量中有什么?字符串是您想要解析的HTML转储吗?您可以提供更多信息吗$('link')
在广义上可以正常工作,所以这似乎不是问题。@BoltClock:HTML文档的字符串(!)表示形式。我不明白这一点<代码>$(“john
”)
返回[, 约翰
]代码>,但$('john
')。查找('p')
什么也得不到。第一个不起作用,因为它没有附加到DOM中。第二个起作用,因为您错过了$
,因此根本没有使用链接
选择器。@pimvdb:我认为第一个应该起作用。关于第二个,您是对的。Sizzle使用上下文。getElementsByTagName
,它失败是因为e元素不在DOM中。此外,
不能包含这样的文本,因为它从来没有像这样保存innerHTML
。第一个不起作用,因为您试图获取标签的文本
,而标签应该是空的。
标签不应该包含这样的内容。jQuery似乎会删除它。如果您的e解释是正确的,可以工作。问题不在于innerText
,问题只是解释了标签将不在文档中,因此无法定位。如果检查以下元素,您将看到许多标题标签已被免除生成(你无法穿越那些不存在的东西)。不,这不是jQuery的错。请阅读文档。@Tomalak:我实际上是在深入了解它,似乎有一些浏览器的限制。它找到的浏览器标签不应该存在/已经存在。所以你很可能是正确的。@Downvoter:请解释。我认为这很清楚。不幸的是,这也不起作用DOMParser无法解析无效XML的HTML:(这是真的。我猜您需要解析任何网站上的随机HTML?在这种情况下,您唯一的选择(除了编写自己的解析器,或使用其他人制作的解析器)是隐藏的iframe(但您需要小心,因为iframe将运行代码)你可能应该在谷歌上搜索一个javascript 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');