我在Drupal。叹。使用<caption>
输出表,没有类/ id,所以我试图在表的标题中附加单词“new”,但前提是该表包含以“GW6D”开头的产品。 / p>
由于表是通过Views动态输出的,因此我无法访问html中的直接标题标记来添加类。 (我不能在一个模板中这样做,因为那时每个标题都会有那个类,所以我会试着弄清楚如何选择没有合适产品的表格并删除那个类)
我试过了:
var target = $("table.views-table td:contains('GW6D')").closest("table");
$(target).each(function(){
$(this).prepend('<span class="newProdStyling">New</span>');
});
哪个适用于这个词。我可以将'tr','td'放在该选择器中,但如果我使用.closest("caption");
,我似乎无法定位实际标签。现在,这个片段会为每个产品附加一个“新”,所以虽然它现在创建了太多“新闻”,但我只想让它在<caption>
标记前面添加。
我也坚持使用jquery 1.3.2但我没有发现任何说tageting <caption>
是特定于版本的。
准系统jsfiddle:http://jsfiddle.net/UbtmJ/4/
答案 0 :(得分:2)
<caption>
不是td
元素的父级(,这就是closest
找不到它的原因)。但是它位于<table>
内部,所以一旦你达到那个就必须向下......
var target = $("table.views-table td:contains('GW6D')").closest("table").find('caption');
$(target).prepend('<span class="newProdStyling">New</span>');
答案 1 :(得分:1)
.closest()
没有“环顾四周”匹配,它通过DOM树中当前元素的祖先遍历 up 。 (见the documentation here)。
找到包含.closest('table')
的表后,您需要遍历向下以查找标题。最简单的功能是.find()
。
所以你的目标是:
var target = $("table.views-table td:contains('GW6D')").closest("table").find("caption");
顺便说一句,所有这些的结果都是一个jQuery对象,所以之后你不需要将它包装在$()
中;这没关系:
target.each(function(){
$(this).prepend('<span class="newProdStyling">New</span>');
});
就像这样:
$("table.views-table td:contains('GW6D')")
.closest("table")
.find("caption")
.each(function(){
$(this).prepend('<span class="newProdStyling">New</span>');
});