如果<td>包含"a",则将<tr>背景设为红色,但每个()都要慢

Hel*_*rld 5 javascript jquery

你怎么写这个,所以运行得更快.它看起来像因为我正在使用each()它正在减慢速度.

我可以使用filter()吗?

 $("#X tr").each(function () {       
     if ($(this).find("table td:eq(1)").text() == "a") {
         $(this).css("background":"red");    
  }

});   

     <table id = "X">
        <tr >
        <td>a</td>
        <td>b</td>
        <td>c</td>
        </tr>
        <tr >
        <td></td>
        <td></td>
        <td></td>
        </tr>
        ...
        <tr >
        <td>a</td>
        <td>b</td>
        <td>c</td>
        </tr>
   </table>
Run Code Online (Sandbox Code Playgroud)

谢谢

Dav*_*mas 8

我建议:

$('td:contains("a")').closest('tr').css('background-color','red');
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

或者,为了影响所有祖先tr元素:

$('td:contains("a")').parents('tr').css('background-color','red');
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

或者影响所有tr具有后代的元素(但是深度嵌套):

$('tr').filter(
    function(){
        return $(this).find('td:contains("a")').length;
    }).css('background-color','red');
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

添加了一个lookAt()可能会被使用的函数:

function lookAt(haystack, needle) {
    if (!haystack) {
        return false;
    }
    else {
        needle = needle ? needle : 'a';
        for (var i = 0, len = haystack.childNodes.length; i < len; i++) {
            var cur = haystack.childNodes[i];
            if (cur.nodeType == 3 && cur.nodeValue.indexOf(needle) > -1){
                return true;
            }
            else if (i == (len-1)) {
                return false;
            }
        }
    }
}

$('#table td').filter(
    function() {
        return lookAt(this);
    }).css('background-color', 'red');?
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示

JS Perf测试检查lookAt()针对return $(this).is(':contains("a")')基于Sizzle的方法的函数方法.

作为参考,为了更仔细地比较JS Perf jQuery测试如下:

$('#table td').filter(
    function() {
        return $(this).is(':contains("a")')
    }).css('background-color', 'red');?
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.


pim*_*vdb 4

您可以使用:contains选择器:http://jsfiddle.net/Af6Nz/1/。

\n\n
\xe2\x80\x8b$("#X tr:contains(\'a\')").css("background-color", "red");\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n