使用 prevAll select 包含关键字的 table 的所有部分
Using prevAll to select all sections of a table containing a keyword
这是 jsFiddle 和相关的 table HTML。
我想使用 jQuery 突出显示或删除 table 中包含特定关键字的部分。
<table>
<tr class="mark"></tr>
<tr><td>apple</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>pear</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>apple</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>pear</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>apple</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>pear</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>apple</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
</table>
现在,我可以使用
$("td:contains('pear')").parent().prev().nextUntil(".mark").css("background-color", "red");
完成我想做的事情(突出显示包含 "pear" 的所有部分,由 ===
分隔)。但是,对于分隔符行不直接位于我正在搜索的文本之前的情况,我如何使用 prevAll
执行此操作?我尝试了 $("td:contains('pear')").parent().prevAll(".mark:first").nextUntil(".mark").css("background-color", "red");
,我认为应该可以,但只有一个部分被突出显示。我想我缺少关于 jQuery 如何处理我想将 prevAll()
之类的操作映射到元素列表的情况的关键理解。
请忽略糟糕的table布局;这就是我必须使用的 T_T
这应该有效:
$("td:contains('pear')").parent().each(function() {
$(this).prevAll(".mark:first").nextUntil(".mark").css("background-color", "red");
});
这是 jsFiddle 和相关的 table HTML。
我想使用 jQuery 突出显示或删除 table 中包含特定关键字的部分。
<table>
<tr class="mark"></tr>
<tr><td>apple</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>pear</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>apple</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>pear</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>apple</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>pear</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr class="mark"></tr>
<tr><td>apple</td></tr>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
</table>
现在,我可以使用
$("td:contains('pear')").parent().prev().nextUntil(".mark").css("background-color", "red");
完成我想做的事情(突出显示包含 "pear" 的所有部分,由 ===
分隔)。但是,对于分隔符行不直接位于我正在搜索的文本之前的情况,我如何使用 prevAll
执行此操作?我尝试了 $("td:contains('pear')").parent().prevAll(".mark:first").nextUntil(".mark").css("background-color", "red");
,我认为应该可以,但只有一个部分被突出显示。我想我缺少关于 jQuery 如何处理我想将 prevAll()
之类的操作映射到元素列表的情况的关键理解。
请忽略糟糕的table布局;这就是我必须使用的 T_T
这应该有效:
$("td:contains('pear')").parent().each(function() {
$(this).prevAll(".mark:first").nextUntil(".mark").css("background-color", "red");
});