3

我在 Drupal。叹。表的输出带有一个<caption>,没有类/ID,所以我试图将“new”这个词附加到表的标题中,但前提是该表包含以“GW6D”开头的产品。

由于表格是通过视图动态输出的,因此我无法访问 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/

4

2 回答 2

2

<caption>不是td元素的父级(这就是为什么closest找不到它)。但它在里面,<table>所以一旦你到达那里你就必须往下走。

var target = $("table.views-table td:contains('GW6D')").closest("table").find('caption');
$(target).prepend('<span class="newProdStyling">New</span>');
于 2013-10-08T18:58:13.207 回答
1

.closest()不会“环顾四周”寻找匹配项,它会向上遍历DOM 树中当前元素的祖先。(请参阅此处的文档)。

找到带有 的表格后.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>');
    });
于 2013-10-08T19:01:09.380 回答