Как получить дочерние элементы селектора $ (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 уже была ссылка на
@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.