2012-03-04 66 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(記得查看控制檯查看日誌)。