Javascript this дочерний элемент

Как получить дочерние элементы селектора $ (this)?

И хотел бы использовать селектор jQuery для выбора дочернего элемента img внутри div по щелчку.

Чтобы получить div , у меня есть этот селектор:

Как я могу получить ребенка img с помощью селектора?

17 ответов

Конструктор jQuery принимает второй параметр с именем context , который можно используется для переопределения контекста выбора.

Что аналогично использованию .find() следующим образом:

Если нужные вам изображения являются только прямыми потомками выбранного элемента, вы также можете использовать > :

Способы обращения к ребенку в jQuery. Я резюмировал это в следующем jQuery:

$(this).find("img"); // any img tag child or grandchild etc. $(this).children("img"); //any img tag child that is direct descendant $(this).find("img:first") //any img tag first child or first grandchild etc. $(this).children("img:first") //the first img tag child that is direct descendant $(this).children("img:nth-child(1)") //the img is first direct descendant child $(this).next(); //the img is first direct descendant child 

Не зная ID DIV, я думаю, вы можете выбрать IMG следующим образом:

У вас может быть от 0 до многих тегов внутри вашего .

Чтобы найти элемент, используйте .find() .

Чтобы сохранить ваш код в безопасности, используйте .each() .

Совместное использование .find() и .each() предотвращает ошибки нулевых ссылок в случае 0 элементов, а также позволяет обрабатывать несколько элементов.

// Set the click handler on your div $("body").off("click", "#mydiv").on("click", "#mydiv", function() < // Find the image using.find() and .each() $(this).find("img").each(function() < var img = this; // "this" is, now, scoped to the image element // Do something with the image $(this).animate(< width: ($(this).width() >100 ? 100 : $(this).width() + 100) + "px" >, 500); >); >);
 

Вы можете использовать любой из следующих методов:

Вы также можете использовать

Который вернул бы все img , которые являются потомками div

JQuery each — это один из вариантов:

 
$('#test img').each(function()< console.log($(this).attr('src')); >);

Вы можете использовать Child Selecor для ссылки на дочерние элементы, доступные в родительском элементе.

И ниже, если у вас нет ссылки на $(this) , и вы хотите сослаться на img , доступный в div из другой функции.

Если за вашим тегом DIV сразу же следует тег IMG, вы также можете использовать:

Вы можете найти все элементы img родительского div, как показано ниже

$(this).find('img') or $(this).children('img') 

Если вы хотите конкретный элемент img, вы можете написать так

$(this).children('img:nth(n)') // where n is the child place in parent list start from 0 onwards 

Ваш div содержит только один элемент img. Так что для этого ниже правильно

 $(this).find("img").attr("alt") OR $(this).children("img").attr("alt") 

Но если ваш div содержит больше элемента img, как показано ниже

Тогда вы не можете использовать верхний код, чтобы найти альтернативное значение второго элемента img. Так что вы можете попробовать это:

 $(this).find("img:last-child").attr("alt") OR $(this).children("img:last-child").attr("alt") 

В этом примере показано общее представление о том, как найти фактический объект в родительском объекте. Вы можете использовать классы для дифференциации вашего дочернего объекта. Это легко и весело. то есть

Вы можете сделать это, как показано ниже:

Источник

Как получить дочерние элементы селектора $ (this)?

и хотел бы использовать селектор jQuery для выбора дочернего элемента img внутри div при щелчке. Чтобы получить div , у меня есть этот селектор:

16 ответов

Конструктор jQuery принимает второй параметр context , который может использоваться для переопределения контекста выделения.

Если желаемые imgs являются только прямыми потомками щелкнутого элемента, вы также можете использовать .children()

для чего это стоит: jQuery («img», this) внутренне преобразуется в: jQuery (this) .find («img»), так что второй намного быстрее. 🙂

Спасибо @Paul, я волновался, что использование find () было неправильным , оказывается, это единственный выход;)

@adamyonk, на самом деле, нет, по крайней мере, если это что-то сделать: jsperf.com/jquery-children-vs-find/3

Я вижу полную противоположность тому, что @PaulIrish заявил в этом примере — jsperf.com/jquery-selectors-comparison-a . Кто-нибудь может пролить свет? Либо я ошибся в тестовом примере, либо jquery изменил эту оптимизацию за последние 4 года.

Ваши тестовые случаи не были честными — вы делали $ (bar), когда bar уже был объектом jQuery. Оптимизация тестов дает разные результаты: jsperf.com/jquery-selectors-comparison-a/2

jQuery (селектор, контекст) является первым примером в документации — api.jquery.com/jquery/#jQuery-selector-context

children() быстрее, чем find() соответствии с этим (29 сентября 2014 г.): jsperf.com/jquery-children-vs-find/92

Простая вещь, которую нужно запомнить: find() отключается, а closest() повышается, и работать будет намного проще 🙂

Вы также можете использовать

который вернет все img , которые являются потомками div

В общем случае кажется, что $(this).children(‘img’) будет лучше. например,

потому что предположительно пользователь хочет найти imgs 1-го уровня.

Если вам нужно получить первый img , который находится ровно на одном уровне, вы можете сделать

@IanBoyd, .children() — это то, откуда происходит «вниз ровно на один уровень», а :first — это то, откуда пришло «первое».

@IanBoyd, этот элемент будет пропущен. Это применимо только если вы используете .find() вместо .children()

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

Интересно, вы могли бы сделать $(this).children(«div»).children(«img») чтобы найти все элементы img внуков с родителями div , которые сами являются детьми $(this) .

@ButtleButkus В вопросе, this уже была ссылка на

содержащий , однако, если у вас есть несколько уровней тега для перехода от ссылки, которую вы имели, то вы определенно могли бы составить более одного вызова children()

@rakslice Я хотел сказать, что this ссылается на

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

. Похоже, вы ответили на мой вопрос: $(this).children(«div»).children(«img») получит два внутри inner

? Это хороший трюк, чтобы знать. Спасибо.

Если вашему тегу DIV сразу следует тег IMG, вы также можете использовать:

.next () действительно хрупкий, если вы не можете всегда гарантировать, что элемент будет следующим элементом, лучше использовать другой метод. В этом случае IMG является потомком, а не родным братом div.

Этот ответ может ввести в заблуждение, так как нет элемента с дочерним классом, поэтому он не будет работать.

Вы можете найти все img-элементы родительского div, как показано ниже

$(this).find('img') or $(this).children('img') 

Если вам нужен определенный элемент img, вы можете написать вот так

$(this).children('img:nth(n)') // where n is the child place in parent list start from 0 onwards 

Ваш div содержит только один элемент img. Итак, для этого ниже верно

 $(this).find("img").attr("alt") OR $(this).children("img").attr("alt") 

Но если ваш div содержит больше элемента img, как показано ниже

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

 $(this).find("img:last-child").attr("alt") OR $(this).children("img:last-child").attr("alt") 

В этом примере показано общее представление о том, как вы можете найти фактический объект в родительском объекте. Вы можете использовать классы для дифференциации вашего дочернего объекта. Это легко и весело. то есть.

Вы можете сделать это, как показано ниже:

и более конкретным образом:

Вы можете использовать find или children, как указано выше. Подробнее посетите Children http://api.jquery.com/children/ и найдите http://api.jquery.com/find/. Пример http://jsfiddle.net/lalitjs/Nx8a6/

Способы обращения к ребенку в jQuery. Я суммировал его в следующем jQuery:

$(this).find("img"); // any img tag child or grandchild etc. $(this).children("img"); //any img tag child that is direct descendant $(this).find("img:first") //any img tag first child or first grandchild etc. $(this).children("img:first") //the first img tag child that is direct descendant $(this).children("img:nth-child(1)") //the img is first direct descendant child $(this).next(); //the img is first direct descendant child 

Я не знаю, является ли это наилучшим подходом к текущей ситуации, но если вы хотите пойти по этому пути и по-прежнему получить объект jQuery, просто оберните его таким образом: $($(this).children()[0]) .

вместо $($(this).children()[x]) используйте $(this).eq(x) или, если хотите первый, просто $(this).first() .

Не зная идентификатор DIV, я думаю, что вы можете выбрать IMG следующим образом:

и если вы собираетесь использовать этот код, по крайней мере, выполните: $ («#» + this.id + «img: first»)

@LocalPCGuy Вы имели в виду: «и если вы собираетесь использовать этот код, обратитесь за помощью »

Зачем вам это делать, если «this» уже выбирает фактический div? Кроме того, если у div нет идентификатора, этот код не будет работать.

Вы можете использовать один из следующих способов:

jQuery each — один из вариантов:

 
$('#test img').each(function()< console.log($(this).attr('src')); >);

Вы можете использовать Child Selecor для ссылки на дочерние элементы, доступные в родительском.

И ниже, если у вас нет ссылки на $(this) , и вы хотите ссылаться на img , доступную в div из другой функции.

Также это должно работать:

У вас может быть 0 до многих тегов внутри вашего .

Чтобы найти элемент, используйте .find() .

Чтобы сохранить код в безопасности, используйте .each() .

Использование .find() и .each() вместе предотвращает пустые ссылочные ошибки в случае 0 элементов, а также позволяет обрабатывать несколько элементов .

// Set the click handler on your div $("body").off("click", "#mydiv").on("click", "#mydiv", function() < // Find the image using.find() and .each() $(this).find("img").each(function() < var img = this; // "this" is, now, scoped to the image element // Do something with the image $(this).animate(< width: ($(this).width() >100 ? 100 : $(this).width() + 100) + "px" >, 500); >); >);
 

Я не знаю, как и где @Alex использует его фрагмент. Итак, я сделал это максимально безопасным и универсальным. Прикрепление события к телу сделает это так, что событие сработает, даже если div не было в dom во время создания события. Очистка события перед созданием нового предотвращает запуск обработчика более одного раза, когда событие инициируется. Не нужно делать это по-своему. Простое присоединение события к div также подойдет.

Благодарю. Я видел это раньше в скрипте, и хотя он работал для того, что задумал программист, когда я попытался использовать его для модального окна, событие все же создало несколько модальных за один клик. Я думаю, что я использовал это неправильно, но я в event.stopImmediatePropagation() итоге с помощью event.stopImmediatePropagation() для элемента, чтобы предотвратить это.

Здесь функциональный код, вы можете запустить его (это простая демонстрация).

Когда вы нажимаете кнопку DIV, вы получаете изображение из разных методов, в этой ситуации «this» — это DIV.

$(document).ready(function() < // When you click the DIV, you take it with "this" $('#my_div').click(function() < console.info('Initializing the tests..'); console.log('Method #1: '+$(this).children('img')); console.log('Method #2: '+$(this).find('img')); // Here, i'm selecting the first ocorrence of console.log('Method #3: '+$(this).find('img:eq(0)')); >); >);

Источник

Последний дочерний элемент у this

Такая проблема. я перебираю блоки через each и на каждой «итерации» мне нужно обратится к последнему дочернему элементу блока, который сейчас рассматривается. Я что только уже не пробовал: $(this).childred(‘.class:last’), потом пробовал $(this).find(‘class.last’) — но это мне ничего не дает. Как добраться до последнего дочернего элемента через this?

Дочерний div элемент
Доброго времени суток необходимо получить доступ к дочернему div print в примере: <div.

Нажатие на дочерний элемент
Здравствуйте! Помогите обработать событие клика на элемент. Например у меня есть несколько полей.

Получить НЕ дочерний элемент
Примерная структура такая : <div <div <span.

Лучший ответ

Сообщение было отмечено bboypan как решение

Решение

ЦитатаСообщение от bboypan Посмотреть сообщение

Такая проблема. я перебираю блоки через each и на каждой «итерации» мне нужно обратится к последнему дочернему элементу блока, который сейчас рассматривается. Я что только уже не пробовал: $(this).childred(‘.class:last’), потом пробовал $(this).find(‘class.last’) — но это мне ничего не дает. Как добраться до последнего дочернего элемента через this?

Получить дочерний элемент
здравствуйте <div onclick="WriteFriend(‘7’)" onmouseover="MouseOverImg()" >

Как выбрать второй дочерний элемент
есть разметка <div <span>Текст</span> <div>Тоже текс</div> </div> .

Как использовать дочерний элемент цикла
Здравствуйте. Использую цикл для перебора всех подходящих значений с использование jQuery, как.

Как создать дочерний элемент в div?
есть div content в нем находятся несколько div елементов text пр. <div > <div.

Источник

Читайте также:  Технология html как пользоваться
Оцените статью