jQuery find()问题

Kis*_*ore 1 javascript jquery

我有以下代码

var page = '<h1>Hello!</h1><p>FOO</p><span class="username">this is ur name</span><p>sample text</p>';
Run Code Online (Sandbox Code Playgroud)

当我提醒$(page).html()我得到你好!当我在div中提取页面内容并提醒时,$(page).html()我会得到整个html内容.

我想在这里完成的是我有一个带有html模板的页面字符串,我正在尝试在其中找到一个类username,我得到了null.

我很困惑这种情况发生了

这是一个小问题

http://jsfiddle.net/6TSuq/1/

Mat*_*att 5

当你调用时$(page),构造一个包含4个元素的jQuery对象; 对于未嵌套在字符串中的每个HTMLElements.

console.log($(page).map(function () {
   return this.nodeName;  
}).toArray());

// ["H1", "P", "SPAN", "P"] 
Run Code Online (Sandbox Code Playgroud)

html()返回innerHTML所述的第一本jQuery对象元件; 这就是你只看到"你好!"的原因.

要找到.username你应该使用的filter()方法,它在jQuery对象中搜索与给定选择器匹配的元素.

alert($(page).filter('.username').text()); // "this is ur name", kthx.
Run Code Online (Sandbox Code Playgroud)

在这里看到你的更新小提琴; http://jsfiddle.net/6TSuq/15/

请记住,将来你可能会嵌套这样的元素;

var page = "<h1><span class='username'>Foo</span></h1>";
Run Code Online (Sandbox Code Playgroud)

在这种情况下,filter()因为.username没有结果; 因为jQuery对象$(page)不包含该.username元素; 它包含一个h1,后代是一个.username.因此,你需要使用;

alert($(page).find('.username').text());
Run Code Online (Sandbox Code Playgroud)

作为参考,看看find(),filter()map()