1

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

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

<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>
4

1 回答 1

3

尝试

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

演示:小提琴

于 2013-05-09T04:09:15.750 回答