如何使用jQuery选择包含特定文本的子元素的父元素

时间:2013-05-09 03:59:44

标签: jquery

我已经解决了我原来的问题(痛苦地),但想知道是否有更好的解决方案(jQuery必须有更好的方法来实现这一点)。我正在使用嵌套表(SharePoint)并尝试选择子单元格包含特定文本的行。我在下面编写了一个简化示例(并且也在jsFiddle上:http://jsfiddle.net/tpZyn/6/

在这个例子中,我试图添加类" red-row"包含文本"(红色)"的单元格行(请记住,我的最终目标是选择所需的行......将它们变成红色只是表明我已选择它们的一种方式),但我尝试的所有选择器最终都选择了更多比所需的行。我终于使用了一个过滤功能来完成我需要做的事情,但这看起来有点尴尬。似乎应该有更好的方法。

<style>
.red-row {
    background-color: #FF0000;
}
</style>
<script>
$(document).ready(function () {
    //$('td:contains("(red)")').parent("tr:first").addClass('red-row');
    //$('td>:contains("(red)")').parent().addClass('red-row');
    $('td').filter(function(){var bob = $(this).text().indexOf("(red)"); return (bob > -1 && bob < 10);}).parent().addClass('red-row');
});
</script>

    <table>
            <tbody>
                <tr>
                    <td colspan="2">
                        <h1>My Header</h1>
                    </td>
                </tr>
                <tr>
                    <table>
                        <tbody>
                            <tr>
                                <td>
                                     <h2>Left Column</h2>

                                </td>
                                <td>
                                     <h2>Right Column</h2>

                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <table>
                                        <tbody>
                                            <tr>
                                                <td>(red) Apple</td>
                                                <td>$3</td>
                                            </tr>
                                            <tr>
                                                <td>(yellow) Banana</td>
                                                <td>$2</td>
                                            </tr>
                                            <tr>
                                                <td>(yellow) Lemon</td>
                                                <td>$1</td>
                                            </tr>
                                            <tr>
                                                <td>(red) Cherry</td>
                                                <td>$2</td>
                                            </tr>
                                            <tr>
                                                <td>(yellow) Quince</td>
                                                <td>$3</td>
                                            </tr>
                                            <tr>
                                                <td>(green) Apple</td>
                                                <td>$4</td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </td>
                                <td>
                                    <p>Some other content</p>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </tr>
            </tbody>
        </table>

1 个答案:

答案 0 :(得分:3)

尝试

$('td:contains("(red)")').not(':has(table)').closest("tr").addClass('red-row');

演示:Fiddle