Подтвердить что ты не робот

Выберите текущий элемент в jQuery

У меня есть HTML-код:

<div>
       <a>Link A1</a>
       <a>Link A2</a>
       <a>Link A3</a>
</div>

<div>
       <a>Link B1</a>
       <a>Link B2</a>
       <a>Link B3</a>
</div>

Когда пользователь нажимает ссылку выше HTML, я хочу получить объект jQuery соответствующего элемента <a>, а затем манипулировать его родным братом. Я не могу думать ни о чем другом, кроме создания идентификатора для каждого элемента <a> и передачи этого идентификатора обработчику события onclick. Я действительно не хочу использовать идентификаторы.

Любые предложения?

4b9b3361

Ответ 1

К счастью, селектора jQuery позволяют вам гораздо больше свободы:

$("div a").click( function(event)
{
   var clicked = $(this); // jQuery wrapper for clicked element
   // ... click-specific code goes here ...
});

... будет прикреплять указанный обратный вызов к каждому <a>, содержащемуся в <div>.

Ответ 2

Когда событие jQuery click вызывает ваш обработчик событий, он устанавливает "this" объекту, на который был нажат. Чтобы превратить его в объект jQuery, просто передайте его функции "$": $(this). Итак, чтобы получить, например, следующий элемент sibling, вы сделаете это внутри обработчика кликов:

var nextSibling = $(this).next();

Изменить: Прочитав комментарий Кевина, я понял, что могу ошибаться в том, чего вы хотите. Если вы хотите сделать то, что он попросил, т.е. Выберите соответствующую ссылку в другом div, вы можете использовать $(this).index(), чтобы получить ссылку на ссылку. Затем вы выберете ссылку в другом div по ее позиции, например, с помощью метода "eq".

var $clicked = $(this);
var linkIndex = $clicked.index();
$clicked.parent().next().children().eq(linkIndex);

Если вы хотите, чтобы иметь возможность идти в обоих направлениях, вам понадобится какой-то способ определить, какой div вы находитесь, чтобы вы знали, нужны ли вам "next()" или "prev()" после "parent()"

Ответ 3

Вы найдете siblings() и parent() полезные методы.

// assuming A1 is clicked
$('div a').click(function(e) {
    $(this); // A1
    $(this).parent(); // the div containing A1
    $(this).siblings(); // A2 and A3
});

Объединение этих методов с andSelf() позволит вам манипулировать любой комбинацией тех элементов, которые вы хотите.

Изменить: комментарий, оставленный Марком относительно делегирования событий на ответ Shog9, очень хороший. Самый простой способ выполнить это в jQuery можно с помощью метода live().

// assuming A1 is clicked
$('div a').live('click', function(e) {
    $(this); // A1
    $(this).parent(); // the div containing A1
    $(this).siblings(); // A2 and A3
});

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

Ответ 4

Я думаю, объединив .children() с $(this), вернет только дочерние элементы выбранного элемента

рассмотрим следующее:

$("div li").click(function() {
$(this).children().css('background','red');
});

это изменит фон только нажатого li

Ответ 5

Чтобы выбрать родного брата, вам нужно что-то вроде:

$(this).next();

Итак, комментарий Shog9 неверен. Прежде всего, вам нужно будет указать переменную "clicked" вне функции "щелчок", иначе она будет потеряна после нажатия.

var clicked;

$("div a").click(function(){
   clicked = $(this).next();
   // Do what you need to do to the newly defined click here
});

// But you can also access the "clicked" element here