转换为jQuery集合的HTML不能用选择器搜索?

转换为jQuery集合的HTML不能用选择器搜索?,jquery,jquery-selectors,Jquery,Jquery Selectors,我尝试使用$.get()动态加载页面,使用var$content=$(data)解析返回,并最终使用选择器仅查找文档的某些部分。只是我不明白为什么从$(data)返回的jQuery集合找不到一些非常基本的选择器 我使用一个非常小的HTML字符串设置了一个 <html> <head> <title>See Our Events</title> </head> <body><div id="content">test

我尝试使用
$.get()
动态加载页面,使用
var$content=$(data)
解析返回,并最终使用选择器仅查找文档的某些部分。只是我不明白为什么从
$(data)
返回的jQuery集合找不到一些非常基本的选择器

我使用一个非常小的HTML字符串设置了一个

<html>
<head>
<title>See Our Events</title>
</head>
<body><div id="content">testing</div></body>
</html>

看我们的活动
测试
我想找到
节点

var content = "<html>\n"+
"<head>\n"+
"  <title>See Our Events</title>\n"+
"</head>\n"+
"<body><div id=\"content\">testing</div></body>\n"+
"</html>";
var $content = $(content);
console.log($content.find('title').length); // Logs 0. Why?
console.log($content.html());               // Logs null. Why?
var content=“\n”+
“\n”+
“查看我们的活动\n”+
“\n”+
“正在测试\n”+
"";
var$content=$(content);
console.log($content.find('title').length);//日志0。为什么?
console.log($content.html());//日志为空。为什么?
如果我将
包装在HTML周围,那么选择器就会工作。(但是如果您查看JSFIDLE,选择器的其他变体仍然不起作用!)

var content=“\n”+
“\n”+
“查看我们的活动\n”+
“\n”+
“正在测试\n”+
"";
var$content=$(content);
console.log($content.find('title').length);//日志1。
console.log($content.html());//记录源的子集。为什么?
请也看看JSFIDLE。它包含比我这里的代码更多的示例,以使文章更易于阅读


为什么我的基本选择器不返回
title
节点?

像这样的Loos就是罪魁祸首

var $content = $(html);
您正在将字符串存储在#content中

而你需要这样做

var $content = $('html');
查看时,您将看到一些关于使用
$()
函数创建新元素的说明。这里有一段话可以说明这个问题:

在传递复杂的HTML时,某些浏览器可能无法生成完全复制所提供HTML源的DOM。如前所述,我们使用浏览器的.innerHTML属性来解析传递的HTML并将其插入当前文档。在此过程中,一些浏览器会过滤掉某些元素,如
元素。因此,插入的元素可能无法代表传递的原始字符串

看起来您可能无法正确创建一些基本元素。在引用的段落上方,您可以了解字符串是如何解析和创建的

我能够通过以下方式在Chrome 22上创建节点:

var node = document.createElement('html');
node.innerHTML = "<head><title>Test me</title></head><body><div><p>Test 2</p></div></body>"

这是在Chrome 22上完成的,但结果可能因浏览器而异。

但我认为
$('string of HTML')
将返回一组元素节点,而不是单个文本节点。不正确?通过执行$(html),您将整个对象放置在选择器中。。您需要存储页面的$('html')//html标记选择器,因为您正在搜索其中的元素,但我希望将整个字符串传递给$()函数,以便它将html解析为节点集。我没有尝试选择“html”节点。为了清楚起见,我将
$(html)
更改为
$(content)
,更新了这个问题。我在Chrome 21中测试谢谢你!你的解决方案奏效了。IE9抛出了一个关于不允许在“html”节点上调用
.innerHTML
的错误,但将其更改为“div”解决了这个问题。我最好测试其他浏览器,以确保
不会被删除。。。奇怪的是,代码现在与jQuery声称它将要做的完全相同(但不起作用):“在大多数情况下,jQuery会创建一个新元素,并将该元素的innerHTML属性设置为传入的HTML片段。”感谢您的帮助!
var node = document.createElement('html');
node.innerHTML = "<head><title>Test me</title></head><body><div><p>Test 2</p></div></body>"
var nodeElem = $(node);
nodeElem.find('title'); //get 1 result