2012-03-04 54 views
28

我将从jQuery的html字符串中获取元素,但我总是在控制台中获取一个未定义的元素。 我的字符串是:jQuery - html字符串的选择器

<td class="test">asd</td><td class="second">fgh</td><td class="last">jkl</td> 

,我想要得到的td.test。

我测试过:

console.log($('.test', '<td class="test">asd</td><td class="second">fgh</td><td class="last">jkl</td>').innerHTML); 
console.log($('.test', '<td class="test">asd</td><td class="second">fgh</td><td class="last">jkl</td>').html()); 
console.log($('.test', '<td class="test">asd</td><td class="second">fgh</td><td class="last">jkl</td>').first().innerHTML); 

和更多一些,但没有任何工程:/

有谁知道我的问题的解决方案?

+0

也许你应该首先用jQuery包装你的字符串? – 2012-03-04 00:37:37

+4

你可以告诉我[它在哪里](http://api.jquery.com/jQuery/)jQuery应该能够接受任意的HTML作为'$'的第二个参数? – 2012-03-04 00:38:40

回答

48

首先,使用jQuery.parseHTML将HTML解析为元素数组;那么你就可以将它转换为一个jQuery集合,并使用filter将集合限制为与选择器匹配的元素。

var html = 
 
    '<td class="test">asd</td>' + 
 
    '<td class="second">fgh</td>' + 
 
    '<td class="last">jkl</td>'; 
 

 
var text = $($.parseHTML(html)).filter('.test').text(); 
 

 
console.log(text);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

3

尝试:

console.log($('<td class="test">asd</td><td class="second">fgh</td><td class="last">jkl</td>').filter('.test').html()); 

或:

console.log($('.test', '<table><td class="test">asd</td><td class="second">fgh</td><td class="last">jkl</td></table>').html()); 
0

我有是以下形式的反应:

<div>... 
</div> 

<div>... 
</div> 

<div>... 
</div> 

@minitech的方法产生了一个HTML选项不起作用的HTML节点数组。

所以,我想这和它的工作很好

$.ajax({ 
    url: 
    success: function($data) { 
     var $parsed_data = $('<div/>').append($data); 
     var found = $parsed_data.find(".Selector"); 
     ... 
    } 
}); 
0

您不能在这样的节点集合使用jQuery选择。您可以将其包装在单个节点中以解决此问题,因此只需添加例如包装<tr>节点。

var htmlBits = '<tr>' 
    + '<td class="test">asd</td><td class="second">fgh</td><td class="last">jkl</td>' 
    + '</tr>'; 

然后它会工作:

console.log($('.test', htmlBits).text()); // outputs 'asd' 

JSFiddle(记得查看控制台查看日志)。

相关问题