Атрибут выбора Jquery! = Включает элементы, которые не имеют атрибута - PullRequest
3 голосов
/ 15 июня 2009

Я пытаюсь выбрать элементы, которые не соответствуют заданному идентификатору атрибута. Основываясь на следующем упрощенном примере, почему $ ("td [groupId! = 1]") возвращает элементы, которые даже не имеют атрибута groupId? Есть ли другой способ выбрать элементы, которые имеют идентификатор группы, где значение не равно 1?

<table border="1">
<tr>
    <td>Group 1</td>
    <td groupId="1">1 - 1</td>
    <td groupId="1">1 - 2</td>
    <td groupId="1">1 - 3</td>
    <td>2</td>
    <td groupId="2">2 - 1</td>
    <td>3</td>
    <td groupId="3">3 - 1</td>
    <td>Total</td>
</tr>
<tr>
    <td>1</td>
    <td groupId="1">1</td>
    <td groupId="1">1</td>
    <td groupId="1">1</td>
    <td>2</td>
    <td groupId="2">2</td>
    <td>3</td>
    <td groupId="3">3</td>
    <td>0</td>
</tr>
<tr>
    <td>1</td>
    <td groupId="1">1</td>
    <td groupId="1">1</td>
    <td groupId="1">1</td>
    <td>2</td>
    <td groupId="2">2</td>
    <td>3</td>
    <td groupId="3">3</td>
    <td>0</td>
</tr>
</table>

Ответы [ 3 ]

4 голосов
/ 15 июня 2009

Попробуйте:

$("td[groupId][groupId!='1']")

Этот тип селектора сопоставляет все элементы с атрибутом groupId, но затем выбирает только те, для которых значение не равно 1.

3 голосов
/ 15 июня 2009

Попробуйте $("td[groupId][groupId != 1]")

Это выберет все тд, которые имеют groupId, а затем выберет все тд в этом наборе, которые не имеют значения 1.

PS. Это задокументированное поведение оператора not.

3 голосов
/ 15 июня 2009

Вы можете сделать следующее, сначала выбрать все td с groupId! = 1, а затем выбрать тех, у кого groupId указан из этого набора jQuery:

$('td[groupId!= 1]').filter('[groupId]');

ИМХО, это совершенно логично, тд, которые не имеют groupId, имеют groupId, который не равен 1, таким образом, добавляются в набор результатов. Или поставить его в коде:

var x = {};
typeof x.foo === 'undefined'; //true
x.foo !== 1; //true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...