jquery:选择元素

时间:2013-10-08 18:53:42

标签: jquery drupal

我在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/

2 个答案:

答案 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>');
    });