查找 id 包含两个子字符串的元素

find elements which id contains two substrings

我有一个 HTML table,我需要将 CSS 样式更改为 <td> 的所有 "id" 包含子字符串 [=13] =] 和子字符串 "_B_V_852" 使用 jquery。子字符串可以位于字符串的任何位置。

我用这个,但没用:

$('id:contains("_A_189"):contains("_B_V_852")').css(style);

可以用方括号来select属性:

$("[id*='_A_189'][id*='_B_V_852']").css(style);

对于这个问题,最好将其缩小到只有 td 元素:

$("td[id*='_A_189'][id*='_B_V_852']").css(style);

"[id*='str']" 表示 "find an element where attribute 'id' contains string 'str' anywhere".

jQuery 文档中的更多信息: http://api.jquery.com/attribute-contains-selector/

编辑: 这个 selector 在 css 中可用,不仅在 jQuery 中可用,所以如果 '_A_189' 和 '_B_V_852' 部分是静态的,你应该考虑添加它到您的样式表而不是使用脚本。例如:

table td[id*='_A_189'][id*='_B_V_852'] {
    /* your styles */
}

如果两个字符串可以“在任何位置”,那么 select 它们的唯一方法,实际上,是 filter():

// finds all <td> elements with an 'id', filters that collection:
$('td[id]').filter(function () {
    // retains only those elements for which the assessment returns true
    // (the strings of both '_A_189' AND
    // the string '_B_V_852' must be found within the id property:
    return this.id.indexOf('_A_189') > -1 && this.id.indexOf('_B_V_852') > -1;
// the found/retained elements remain in the chain, passed to
// the css() method:
}).css(/* style */);

您最初的尝试:

$('id:contains("_A_189"):contains("_B_V_852")').css(style);

没有用,因为 :contains() selector 查看元素的文本内容来查找您正在搜索的字符串,而不是 attributes/properties 的元素。

此外,因为没有 .#: 或其他字符来指示,所以 jQuery 正在寻找 [= 的元素类型17=],而不是查看 id 属性 的所有元素,其文本包含提供给 :contains() selector 的字符串。

参考文献:

contains 的正确 css 选择器是 [attribute*=substring],因此 jquery:

$('[id*="_A_189"][id*="_B_V_852"]').css(样式);

你可以很简单地做到这一点:

$( "td[id*='_A_189'][id*='_B_V_852']").css(style);