2015-09-27 3 views
1

Моего HTML являетсяJQuery поймать вопрос предыдущего класса

<input type="text" class='myclass' value="start"> 
<div> 
    <input type="text" class='myclass' value="sea"> 
</div> 
<button class="mybutton">Catch</button> 
<br/> 
<input type="text" value="end" class='myclass'> 

и Javascript является

$('.mybutton').click(function(){ 
    var text = $(this).prev('.myclass').val(); 
    console.log(text); 
}); 

Я хочу, чтобы получить значение непосредственного предыдущего значения входного по имени класса. но результат undefined. Я хочу получить значение sea. В чем проблема? ссылка на рабочий скрипт Here >> Спасибо.

+3

*„немедленным предыдущий вход“ *. В этом проблема, это не сразу. – dfsq

+0

Другим словом является ближайший предыдущий ввод. Я пробовал.ближайший(), но тот же результат –

+0

ближайший траверс дерева DOM вертикально вверх, в то время как вы хотите горизонтальный траверсаль. Prev проверяет ближайшего родственника и prevAll проверяет все предыдущие. – dfsq

ответ

3

Немедленный предыдущий элемент catch кнопки является div, так что вам нужно сделать find() внутри этот , как это:

$('.mybutton').click(function(){ 
    var text = $(this).prev('div').find('.myclass').val(); 
    console.log(text); 
}); 
1

Я хочу, чтобы получить значение непосредственного предыдущего ввода

Ну, вот в чем проблема, вход не сразу. Вы можете использовать метод prevAll вместо:

$('.mybutton').click(function(){ 
 
    var text = $(this).prevAll('.myclass').val(); 
 
    alert(text); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" class='myclass' value="start"> 
 
<div> 
 
    <input type="text" class='myclass' value="sea"> 
 
</div> 
 
<button class="mybutton">Catch</button> 
 
<br/> 
 
<input type="text" value="end" class='myclass'>

+0

Я хочу получить значение 'sea' –

+0

О, в этом случае взгляните на ответ Новичок, это то, что вам нужно сделать. – dfsq

0

Интересный. Я никогда раньше не использовал функцию «.rev()». В любом случае:

Если вы читаете здесь https://api.jquery.com/prev/ вы найдете:
«Учитывая объект JQuery, который представляет собой набор элементов DOM, то .prev() метод ищет предшественник каждого из этих элементов в дереве DOM и создает новый объект jQuery из соответствующих элементов. "

Также:
Если ни один предыдущий родственный не существует, или если предыдущий элемент родственный не соответствует прилагаемый селектор, пустой объект JQuery возвращается.

Иными словами, как уже упоминалось ранее, «.prev()» просто ищет предыдущий элемент.

Чтобы сделать то, что вы хотите сделать так, как вы хотите сделать это, Вы могли бы хотеть рассмотреть «) .prevAll (» функция, которая объяснена здесь: https://api.jquery.com/prevAll/

Но тогда снова, так как элемент, который вы хотите на самом деле ребенок предыдущего элемента, а не прямая родственные вы могли бы хотеть рассмотреть НАЧИНАЮЩЕЕ предложение:

$('.mybutton').click(function(){ 
    var text = $(this).prev('div').find('.myclass').val(); 
    console.log(text); 
}); 

Но на самом деле вы должны быть в состоянии сделать это немного проще, удалив „селектора Div“:

$('.mybutton').click(function(){ 
    var text = $(this).prev().find('.myclass').val(); 
    console.log(text); 
}); 

Пока вы уверены, что ваш элемент».MyClass' будет потомком предыдущего элемента это должно работать Вне зависимости от того, что родительский элемент (Div, поверочного, что угодно)

Смежные вопросы