jquery-selectors - Получить второго ребенка с помощью jQuery




(8)

$(t).html()

возвращается

<td>test1</td><td>test2</td>

Я хочу получить второй td из объекта $(t) . Я искал решение, но ничего не работало для меня. Любая идея, как получить второй элемент?


Answers

Использовать .find()

$(t).find("td:eq(1)");

td:eq(x) // x is index of child you want to retrieve. eq(1) means equal to 1. //1 denote second element


Я не видел, чтобы это упоминалось здесь, но вы также можете использовать селектор спецификаций CSS. См. Документы

$('#parentContainer td:nth-child(2)')

Вот решение, которое, возможно, яснее читать в коде:

Чтобы получить второго ребенка неупорядоченного списка:

   $('ul:first-child').next()

И более подробный пример: этот код получает текст атрибута «title» второго дочернего элемента UL, идентифицированного как «my_list»:

   $('ul#my_list:first-child').next().attr("title")

В этом втором примере вы можете избавиться от «ul» в начале селектора, поскольку он является избыточным, поскольку идентификатор должен быть уникальным для одной страницы. Здесь просто добавить ясность в пример.

Примечание по производительности и памяти , эти два примера - хорошие исполнители, потому что они не делают jquery, сохраняя список элементов ul , которые впоследствии нужно было отфильтровать.


Как это:

$(t).first().next()

ОСНОВНОЕ ОБНОВЛЕНИЕ:

Помимо того, насколько красив ответ, вы должны также подумать о производительности кода. Поэтому он также знает, что именно находится в переменной $(t) . Является ли это массивом из <TD> или это узел <TR> с несколькими <TD>s внутри него? Чтобы еще раз проиллюстрировать эту точку, см. Оценки jsPerf в списке <ul> с 50 <li> детьми:

http://jsperf.com/second-child-selector

Метод $(t).first().next() является самым быстрым здесь, безусловно.

Но, с другой стороны, если вы берете узел <tr> и находите детей <td> и запускаете один и тот же тест, результаты не будут одинаковыми.

Надеюсь, поможет. :)


В дополнение к использованию методов jQuery вы можете использовать коллекцию собственных cells которую предоставляет <tr> .

$(t)[0].cells[1].innerHTML

Предполагая, что t является элементом DOM, вы можете обойти создание объекта jQuery.

t.cells[1].innerHTML

возьмите второго ребенка:

$(t).children().eq(1);

или, возьмите второго ребенка <td> :

$(t).children('td').eq(1);

Попробуй это:

$("td:eq(1)", $(t))

или

$("td", $(t)).eq(1)

Вы можете сделать это:

var frm = $(document.myform);
var data = JSON.stringify(frm.serializeArray());

См. JSON .





jquery jquery-selectors