JQuery-如何选择非空表单元格的上一个表单元格

JQuery-如何选择非空表单元格的上一个表单元格,jquery,Jquery,我正在尝试选择非空表格单元格的上一个表格单元格 我有以下代码 此操作有效(高亮显示所有空单元格) 此操作有效(突出显示所有非空单元格) 这不起作用(突出显示非空单元格的上一个单元格) 感谢所有的帮助 谢谢请确保在最后一行之前JS中没有错误,因为它可以正常工作 您的代码是正确的,您可以在此处进行检查: 此代码: $("td.brand:empty").css('background-color', 'red'); $("td.brand:not(:empty)").css('background-

我正在尝试选择非空表格单元格的上一个表格单元格

我有以下代码

此操作有效(高亮显示所有空单元格)

此操作有效(突出显示所有非空单元格)

这不起作用(突出显示非空单元格的上一个单元格)

感谢所有的帮助


谢谢

请确保在最后一行之前JS中没有错误,因为它可以正常工作

您的代码是正确的,您可以在此处进行检查:

此代码:

$("td.brand:empty").css('background-color', 'red');
$("td.brand:not(:empty)").css('background-color', 'green');
$("td.brand:not(:empty)").prev("td.brand").css('background-color', 'yellow');
这方面的工作:

<table>
    <tr>
        <td class="brand">sdfsdf</td>
        <td class="brand"></td>
        <td class="brand">sdfsdfs</td>
    </tr>
    <tr>
        <td class="brand"></td>
        <td class="brand">ssdfsdf</td>
        <td class="brand"></td>
    </tr>
</table>

sdfsdf
sdfsdfs
ssdfsdf

在您在注释中提供的示例中,前面的行中没有空的
td.brand
,因此我猜这可能是您需要的,基于对示例的编辑

$("tr:has(td.brand:not(:empty))").prev().find("td.brand").css('background-color', 'yellow');
这将查找具有非空
td.brand
的所有行,然后选择上一行,然后选择该行的
td.brand


这里有一个提琴:(你的提琴的更新)

如果你需要从它们的行中提取
td
s,你可以将它们分组到一个对象中并使用索引:

var $tds = $('td.brand');
$tds.filter(":not(:empty)").each(function() {
    var i = $tds.index(this);
    if (i) // prevents wrapping to last
        $tds.eq(i-1).addClass('on');
});

您能提供一个关于JSFIDLE的非工作示例吗?它看起来应该可以工作。它应该可以工作,请注意,
prev()
将只在相邻的同级上工作,而不是在其他行上的
td
上“上一个单元格”在这种情况下意味着什么?左边的那一个还是上面的那一个?那是什么意思?我刚刚检查了你的代码,它工作得很好->这正是我想要的,但出于某种原因,它在我的网站上不工作,但在小提琴中工作。有什么想法可以解释为什么会这样吗?如果你提供的示例与你的实际解决方案相同,我不能说有什么问题,对不起……这看起来不错。请允许我冒昧地问一下,如果以前的td确实包含一个条目本身,您将如何防止应用该类。有时每个品牌只有一个条目,在这个用例中它看起来很奇怪。
<table>
    <tr>
        <td class="brand">sdfsdf</td>
        <td class="brand"></td>
        <td class="brand">sdfsdfs</td>
    </tr>
    <tr>
        <td class="brand"></td>
        <td class="brand">ssdfsdf</td>
        <td class="brand"></td>
    </tr>
</table>
$(document).ready(function(){
    $("td:not(:empty)").each(function(){
        $(this).prev().css('background-color', 'yellow');
    });
});
$("tr:has(td.brand:not(:empty))").prev().find("td.brand").css('background-color', 'yellow');
var $tds = $('td.brand');
$tds.filter(":not(:empty)").each(function() {
    var i = $tds.index(this);
    if (i) // prevents wrapping to last
        $tds.eq(i-1).addClass('on');
});