2015-08-13 60 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/