Действительно ли это - ошибка в том, как jQuery рассматривает дочерние селекторы?

Существует ли ошибка в том, как jQuery обрабатывает дочерние селекторы, или я пропускаю что-то очевидное? Я не могу заставить это работать, когда ребенок - что-либо кроме *.

Вот селектор jQuery, который я выполняю:

$("#myTable > tr").each(function() {
    // do somthing }
);

И структура таблицы:

<table id="myTable">
    <tr>
        <td><button>someButton</button></td>
        <td><textarea>...</textarea></td>
    </tr>
</table>

Никакие элементы не соответствуют вышеупомянутому селектору #myTable > tr. Но эти два упомянутые ниже селектора хорошо работают.

$("#myTable tr") // search all descendants for tr

или используйте подстановочный знак для соответствия детям:

$("#myTable > *") // search all child elements

Какие-либо идеи о том, что могло быть неправильным здесь?

Спасибо за быстрых парней ответов! К сожалению, может только выбрать тот.

6
задан Anurag 16 January 2010 в 02:15
поделиться

3 ответа

Это, потому что Firefox автоматически добавляет Tbode Tbode элементы вокруг вашего TR элементов, если нет. Вы действительно не можете использовать таблицу> Tr .

У вас есть:

<table id="myTable">
    <tr>
        <td><button>someButton</button></td>
        <td><textarea>...</textarea></td>
    </tr>
</table>

, но Firefox видит это:

<table id="myTable">
  <tbody>
    <tr>
        <td><button>someButton</button></td>
        <td><textarea>...</textarea></td>
    </tr>
  </tbody>
</table>

Другие элементы будут работать совсем хорошо:

<div>
  <strong>Hi</strong>
</div>

и селектор:

alert( $("div > strong").text() ); // Alerts "Hi"
10
ответ дан 8 December 2019 в 14:43
поделиться

Это расширение GNU, называемое выражениями оператора .

При объявлении макросов в стандарте-C часто появляется do..., в то время как (0) циклы используются для аналогичных целей (например, создание области блока). Выражение инструкции превосходит взлом цикла, поскольку оно может возвращать значение. Если вы хотите сделать что-то подобное в стандарте-C, вам придется определить дополнительную функцию и потерять удобство лексического объема.

-121--3632172-

() - выражение. ({код; code;}) является составным оператором внутри выражения. Это внутренний номер GNU C.

http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html

EDIT: wow, я получил эту ссылку от Google и не заметил, что она была для gcc 2,95 сначала. Древний!

-121--3632174-

Существует неявное значение элемента < tbody > вместо:

<table id="myTable">
  <tr>
    <td><button>someButton</button></td>
    <td><textarea>...</textarea></td>
  </tr>
</table>

DOM фактически содержит:

<table id="myTable">
<tbody>
  <tr>
    <td><button>someButton</button></td>
    <td><textarea>...</textarea></td>
  </tr>
</tbody>
</table>

, поэтому измените его на:

$("#mytable > tbody > tr");

Использование элементов < tbody > , < thead > и < tfoot >

5
ответ дан 8 December 2019 в 14:43
поделиться

Да, Даг совершенно прав. Просто дополнить его ответ, может быть, вы знаете, или, возможно, нет, но помните, что jQuery Trasses Travers, а не HTML «Text», который вы отправляете в браузер.

Дом - интерпретация браузера на HTML, которую вы отправляете.

1
ответ дан 8 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: