2015-08-13 58 views
6
$(function() { 
    myhtml = '<tr><td>1</td><td>Orange</td><td>1799.00 x <span>1</span></td><td>0.00</td><td>1799.00</td></tr><tr class="shippingRow"><td></td><td></td><td></td><td>Shipping</td><td>2.00</td></tr><tr class="totalRow"><td></td><td></td><td></td><td><strong>Total</strong></td><td><strong>1811.00</strong></td></tr>' 
    console.log($(myhtml).find('.shippingRow td').length); 
}); 

我得到零而不是一個,哪一部分我錯過了?我想刪除類名或對myhtml做一些樣式。選擇類的原始html

回答

8

.shippingRow tr不嵌套在HTML字符串中的任何其他元素中。這意味着它是jQuery對象返回的元素之一。 (即,因爲你有3個tr,所以$(myhtml).length將返回3)。

由於.find只搜索後代jQuery對象中的元素,它沒有找到與類shippingRow任何元素。

一種方法是使用.filter代替:

$(myhtml).filter(".shippingRow").find("td").length 
+0

過濾速度慢於找到合適的?也許我應該正確包裝標籤。 –

+0

@AliceXu我會說在這種情況下,性能差異可能可以忽略不計。由於不同瀏覽器的性能不同,通常很難衡量性能。這些行動只在一小部分要素上被調用。有可能創建元素來正確包裝它可能會抵消任何潛在的性能增益。 – Stryner

+0

我剛剛發現我無法操縱它。 $(myhtml).filter(「。shippingRow」)。find(「td」)。attr('style','padding:10px');'< - 不起作用。 –

2

嘗試的myhtml</tbody></table>myhtml接近開頭添加<table><tbody>,看到Finding element in jquery ajax html answer

myhtml = '<table><tbody><tr><td>1</td><td>Orange</td><td>1799.00 x <span>1</span></td><td>0.00</td><td>1799.00</td></tr><tr class="shippingRow"><td></td><td></td><td></td><td>Shipping</td><td>2.00</td></tr><tr class="totalRow"><td></td><td></td><td></td><td><strong>Total</strong></td><td><strong>1811.00</strong></td></tr></tbody></table>'; 
 

 
console.log($(myhtml).find('.shippingRow td').length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

2

俄勒只有在僅附加在文檔中的情況下,ment纔會成爲DOM的一部分。

您的示例只是一個字符串,您需要將該字符串放入文檔中才能成爲有效的DOM。

你可以這樣說:

var myhtml='<tr><td>1</td><td>Orange</td><td>1799.00 x <span>1</span></td><td>0.00</td><td>1799.00</td></tr><tr class="shippingRow"><td></td><td></td><td></td><td>Shipping</td><td>2.00</td></tr><tr class="totalRow"><td></td><td></td><td></td><td><strong>Total</strong></td><td><strong>1811.00</strong></td></tr>'; 
var fragment = document.createDocumentFragment(); 
var span= document.createElement("span"); 
$(span).append(myhtml); 
fragment.appendChild(span); 
console.log($(span).find('.shippingRow td').length); 

我用文檔片段讓你的HTML不會是DOM樹的一部分,但仍然可以通過JavaScript訪問。有一個在這裏讀:https://developer.mozilla.org/en-US/docs/Web/API/Document/createDocumentFragment

DocumentFragments是DOM節點。它們不是主要DOM 樹的一部分。通常的用例是創建文檔片段,將 元素附加到文檔片段,然後將文檔 片段附加到DOM樹。在DOM樹中,文檔片段被 替換爲其所有子項。

FIDDLE:http://jsfiddle.net/0oxdqdot/