jQuery:获取包含一些文本的最后'td'而不使用每个文本

时间:2013-06-10 13:03:26

标签: javascript html jquery

我有以下格式的表格,

<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的情况下执行此操作?

6 个答案:

答案 0 :(得分:6)

更新

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

演示:Fiddle

答案 1 :(得分:4)

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

使用:包含选择器:

http://jsfiddle.net/NkYZf/2

var search = "Dynamic Text3";
$('table td:contains("'+search +'"):last').css('color','red');

答案 2 :(得分: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());

FIDDLE

答案 3 :(得分:2)

您可以使用:contains

var lastTd = $('td:contains("' + text + '"):last');

答案 4 :(得分: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

答案 5 :(得分:-1)

$("td").filter(function() { return $.text([this]) == 'Dynamic Text3'; })
   .addClass("red");