附加到某个元素,也没有某个类

时间:2016-01-23 16:33:03

标签: javascript jquery

我有一个表,可能有hidden类的行:

<table id="sortme">
    <tr>
        <td>
            <input type="hidden" name="pr" value="1" />
        </td>
    </tr>
    <tr>
        <td>
            <input type="hidden" name="pr" value="7" />
        </td>
    </tr>
    <tr>
        <td class="hidden">
            <input type="hidden" name="pr" value="4" />
        </td>
    </tr>

我有函数根据input

对整个表进行排序
<script>
$(function() {
    $('#sortme tr:has(input[name="pr"])').sort(function(a, b) {
        return 1 * $(a).find("input[name='pr']").val() - 1 * $(b).find("input[name='pr']").val();
    }).appendTo('#sortme');
});
</script>

我想只对行进行排序,而不使用 hidden类。

我尝试添加:

|| tr.!(hasClass("hidden"))

这样的功能:

<script>
$(function() {
    $('#sortme tr:has(input[name="pr"]) || tr.!(hasClass("hidden"))').sort(function(a, b) {
        return 1 * $(a).find("input[name='pr']").val() - 1 * $(b).find("input[name='pr']").val();
    }).appendTo('#sortme');
});
</script>

但那可能不是正确的语法。

我甚至不确定我是应该在那里,还是在appendTo部分。

应该怎么做?

编辑:

更新的代码:

我先按类(非隐藏)排序,然后按数字排序(最低位):

  $('#sortme tr:has(input[name="pr"]):not(.hidden)').sort(function(a, b) {
    return 1 * $(a).find("input[name='pr']").val() - 1 * $(b).find("input[name='pr']").val();
  }).appendTo('#sortme');
    $('#sortme tr:has(input[name="pr"]).hidden').sort(function(a, b) {
    return 1 * $(a).find("input[name='pr']").val() - 1 * $(b).find("input[name='pr']").val();
  }).appendTo('#sortme');  

1 个答案:

答案 0 :(得分:3)

您可以使用:not选择器通过使用CSS选择器排除某些元素。

$('#sortme tr:has(input[name="pr"]):not(.hidden)')

或者,也可以使用.not()

$('#sortme tr:has(input[name="pr"])').not('.hidden')