问题描述
||
我使用
$.get
或$.ajax
加载了一些HTML。在Chrome和Firefox的调试器中,我可以看到html已正确加载:
>数据
\"<html><head><title></title></head><body>
<div id=\"topdiv\" style=\"display:none;width:880px; height:600px;\"></div>
</body</html>\"
因此,它是一串HTML。大。接下来,我尝试使用jQuery对其进行解析:
$doc = $(data);
> $ doc
[<TextNode textContent=\"\\n\\n\">,title,<TextNode textContent=\"\\n\\n\\n\">,div#topdiv,<TextNode textContent=\"\\n \\n\">]
啊,什么? html
,head
,body
去哪儿了?好吧,无论如何,我只关心div
$div = $data.find(\'div\');
> $ div
[]
???
好。 div为空。经过进一步的实验,我意识到jQuery基本上会忽略任何顶级标签。然后它实际上不允许您选择任何第二级标签,因此,如果在外部div内嵌套了一个div,则将选择该div。但是...什么?
jQuery对这些\“ TextNode \”元素似乎有点cho,奇怪的是,它创建了自己(而不是html,body)。因此,我编写了一些代码来解决这些问题,方法是循环遍历元素,然后直接提取非文本节点:
function getNodes($doc) {
var result = new Array();
for (var i = 0; i < $doc.length; i++) {
if ($doc[i].hasOwnProperty(\"tagName\")) {
result.push($doc[i]);
}
}
return $(result);
}
很棒!在Chrome上。
在Firefox中对其进行了尝试,但没有任何效果。
事实证明,并非Firefox中的每个对象都具有hasOwnProperty
函数。什么??好。因此重写为:
typeof($tempHtml[i].tagName) !== \'undefined\'
最后,也可以在Firefox中使用。
哇。我只是愚蠢吗?为什么仅仅需要将HTML字符串转换为jQuery对象就需要大量的后期处理?我觉得我一定很想念一些明显的东西。有没有办法做到这一点而不涉及这种混乱?
我要做的就是加载一些HTML并将其变成jQuery对象。然而,这似乎越来越令人困惑。我是从根本上做错了吗?为什么这么复杂?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)