Как выбрать один элемент в jQuery?

У меня есть структура таблицы, которая выглядит так:

<table>
 <tr id = "row1">
   <td>
     <div>row 1 content1</div>
   </td>
   <td>
     <div>row 1 content2</div>
   </td>
   <td>
     <div>row 1 content3</div>
   </td>
 </tr>
 <tr id = "row2">
   <td>
     <div>row 2 content1</div>
   </td>
   <td>
     <div>row 2 content2</div>
   </td>
   <td>
     <div>row 2 content3</div>
   </td>
 </tr>
 <tr id = "row3">
   <td>
     <div>row 3 content1</div>
   </td>
   <td>
     <div>row 3 content2</div>
   </td>
   <td>
     <div>row 3 content3</div>
   </td>
 </tr>
</table>

Используя jQuery, я пытаюсь выбрать DIV во второй ячейке третьей строки. Я пробовал (среди прочего) следующее:

var d = $('#row3').children(':eq(1)').children(':eq(0)');

Я получаю массив с одним элементом (DIV, который мне нужен), и мне нужно затем получить доступ с помощью d [0]. Почему jQuery возвращает массив из одного элемента, я думал, что использование селектора выше приведет к непосредственному возврату элемента DIV?


@ Shog9 - Ага ... Хорошо, в моем мозгу только что зажегся свет, теперь я понял. Ваше здоровье.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
33
0
56 281
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

jQuery всегда возвращает набор элементов. Иногда набор пуст. Иногда он содержит только один элемент. Прелесть этого заключается в том, что вы можете написать код, который будет работать одинаково, независимо от того, сколько элементов сопоставляется:

$("selector").each(function()
{
   this.style.backgroundColor = "red";
});

Веселье!

Как это возможно выбранный ответ? Возник вопрос: «Как выбрать один элемент?» и ваш ответ был "вы получите их все!"

claudekennilol 05.03.2021 04:36

Если вы обнаружите, что знаете, что будете иметь дело только с одним элементом и что будет возвращен только один элемент, вы всегда можете выбрать нулевой индекс массива.

$("selector")[0].value 

Это грязно и нарушает соглашение jQuery в целом ... но вы «могли» это сделать.

Я получаю сообщение «TypeError: $ (...) [0] .html не является функцией», в то время как .first () работает нормально.

Jonas Äppelgran 18.05.2015 12:59

Простой выбор индекса [0] массива вернет элемент DOM, но не объект jQuery, поэтому вы не сможете использовать для него такие методы jQuery, как .html ().

abd3721 05.11.2015 21:21

Если вы предпочитаете сохранить объект jQuery, вы можете вместо этого написать:

$("selector").first().val()

Это вернет массив, содержащий один элемент. На нем нельзя запускать события click. Решение CodeNinja, приведенное выше, возвращает один элемент не в массиве.

Ahmad Alfy 04.09.2013 02:56

jQuery всегда работает с объектами, подобными массивам. Любое последующее действие относится ко всем элементам. Таким образом, все эти выражения дадут один и тот же результат: $("selector:first").click(), $("selector").first().click(), $($("selector")[0]).click(). См. Ответ Shog9.

vcarel 25.11.2013 21:05

$("selector").eq(5)

Это возвращает массив jquery первого класса только с 5-м элементом. то есть я могу выполнять функции jquery для возвращаемого значения.

Нашел ответ здесь: https://forum.jquery.com/topic/jquery-class-selectors-referencing-individual-elements

Неважно, это не отвечает на заданный вопрос, но я это искал. Не понял, пока не прочитал вопрос снова.

Vijay Vepakomma 21.07.2015 21:17

Чтобы получить div напрямую, попробуйте это

$divElement = $('#row3 td div');

но если вы сделаете это в приведенном выше HTML, операция, например $('#row3 td div').css('background-color','red')будет применяться ко всем этим 3 <div>! (по крайней мере, с jQuery 2.1)

Andreas Covidiot 12.06.2018 09:13

Для этого есть несколько вариантов:

"Выберите первый из нескольких элементов Div в приведенном ниже фрагменте и измените его цвет на розовый"

<div>Div 1</div> <div class = "highlight">Div 2</div> <div id = "third">Div 3</div> <div class = "highlight">Div 4</div>

Здесь мы можем выбрать первый Div следующими способами:

1) $("div").first().css("color","pink");
2) $("div:first").css("color","pink");
3) $("div:first-of-type").css("color","pink");

Обратите внимание, что 2 - это конструкция jQuery, а не собственная конструкция css, и поэтому она может быть немного менее производительной.

Это работает в jQuery 3.4.1:

$($('li')[0]).css('color', 'blue');

Другие вопросы по теме