Самый быстрый способ получить доступ к следующему значению с помощью jQuery - PullRequest
4 голосов
/ 14 сентября 2011

Кажется, мне трудно понять, как работают эти селекторы jQuery.

Скажем, у вас есть этот вид HTML

<form>
    <input type="hidden" name="something" value="1" class="class_name" />

    <div>
        <input class="blur_function" name="email" />
    </div>
</form>

и следующий jQuery

$(document).ready(function(){

   $('.blur_function').live('blur',function(){

       // get the value of the hidden input above 
       var something = $(this).prev('.class_name').val();

   });

});

Я бы предположил, что этот 'prev ('. Class_name ') будет проходить вверх по коду, пока он не достигнет чего-то с class = "class_name", однако в итоге я получу undefined , поскольку он проходит только внутри элемент его внутри.

Так что мне нужно сделать что-то подобное, чтобы выйти за пределы родительского div и в рамках предыдущего .class_name:

  var something = $(this).parent().prev('.class_name').val();

Есть ли более быстрый способ сделать это, используя ту же структуру HTML?

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

Я предложу:

var something = $('.class_name', $(this).closest('form')).val();

для выбора всех входов, которые являются прямыми дочерними элементами:

var something = $('> .class_name', $(this).closest('form')).val();

, чтобы выбрать только первый .class_name, который является прямым потомком формы:

var something = $('> .class_name:first', $(this).closest('form')).val();

jsFiddle demo

1 голос
/ 14 сентября 2011

Почему бы не выбрать его по названию?

var someValue = $('input[name="something"]').val();

1 голос
/ 14 сентября 2011

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

Это случайность, что ваш .class_name элемент является родным братом предка. Если ваш HTML немного меняется в целях верстки, это может быть уже не так. Что важно , так это то, что ваш элемент .class_name имеет общего предка form с .blur_function.

Учитывая это, вот мое предложение:

$('.blur_function')
  .closest('form')
    .find('.class_name')
      .val()

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...