Существует ли ошибка в том, как 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
Какие-либо идеи о том, что могло быть неправильным здесь?
Спасибо за быстрых парней ответов! К сожалению, может только выбрать тот.
Это, потому что 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"
Это расширение GNU, называемое выражениями оператора .
При объявлении макросов в стандарте-C часто появляется do..., в то время как (0)
циклы используются для аналогичных целей (например, создание области блока). Выражение инструкции превосходит взлом цикла, поскольку оно может возвращать значение. Если вы хотите сделать что-то подобное в стандарте-C, вам придется определить дополнительную функцию и потерять удобство лексического объема.
() - выражение. ({код; 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 >
Да, Даг совершенно прав. Просто дополнить его ответ, может быть, вы знаете, или, возможно, нет, но помните, что jQuery Trasses Travers, а не HTML «Text», который вы отправляете в браузер.
Дом - интерпретация браузера на HTML, которую вы отправляете.