4

我有以下格式的表格,

<table>
  <tr>
    <td>Dynamic Text1</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Dynamic Text2</td>
  </tr>
  <tr>
    <td>Dynamic Text3</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
</table>

我想得到最后一个td包含的东西,而不仅仅是一个&nbsp;. 在显示的示例标记中,这将是Dynamic Text3,但我不会事先知道具体的文本。这可以通过在循环中运行来实现,但是,有没有办法在不使用的情况下做到这一点each

4

6 回答 6

6

更新:

$('td').filter(function(){
    return !!$.trim($(this).text());
}).last().css('color', 'red');

演示:小提琴

于 2013-06-10T13:07:11.970 回答
4

更新这不包括 OP 的需求,误解了 OP 的问题

使用:包含选择器:

http://jsfiddle.net/NkYZf/2

var search = "Dynamic Text3";
$('table td:contains("'+search +'"):last').css('color','red');
于 2013-06-10T13:07:05.123 回答
4

这应该现在可以工作

var td = $('table td:last');

function findTD() {
    if (!td.text().replace(/\u00a0/g, "").length) {
        if (td.parent().is(':not(:first)')) {
            td = td.parent().prev().find('td');
            return findTD();
        } else {
            return 'No text found!';
        }
    } else {
        return td.text();
    }
}

alert(findTD());

小提琴

于 2013-06-10T13:17:24.180 回答
2

您可以使用:contains

var lastTd = $('td:contains("' + text + '"):last');
于 2013-06-10T13:07:11.610 回答
0

这是一个可能的 POJS 解决方案

HTML

<table>
    <tr>
        <td>Dynamic Text1</td>
    </tr>
    <tr>
        <td>&nbsp;</td>
    </tr>
    <tr>
        <td>Dynamic Text2</td>
    </tr>
    <tr>
        <td>Dynamic Text3</td>
    </tr>
    <tr>
        <td>&nbsp;</td>
    </tr>
</table>

Javascript

var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT, function (node) {
    if (node.tagName === "TD" && node.textContent.trim()) {
        return NodeFilter.FILTER_ACCEPT;
    }

    return NodeFilter.FILTER_SKIP;
}, false);

while (treeWalker.nextNode()) {}

console.log(treeWalker.currentNode !== document.body ? treeWalker.currentNode : null);

jsfiddle 上

于 2013-06-10T13:45:49.063 回答
-1
$("td").filter(function() { return $.text([this]) == 'Dynamic Text3'; })
   .addClass("red");
于 2013-06-10T13:12:31.807 回答