2010-05-20 4 views
1

Я таблица изложил так:Выберите скрытый ввод внутри следующего тд [JQuery]

 <td> 
       somename 
     </td> 
     <td class="hoverable value" > 
       somevalue 
     </td> 
     <td class="changed"> 

     </td> 
     <td class="original value"> 
      <input type="hidden" value="somevalue" /> 
     </td> 

И то, что я пытаюсь сделать это, я парить над hoverable тд, который превращает его в текстовое окно. Как только я нахожусь, я хочу проверить скрытое поле для его первоначального значения и поместить изображение в измененное, если 2 отличаются друг от друга. У меня уже есть это:

$(document).ready(function() { 
    var newHTML = ''; 

    $('table td.hoverable').hover(
    function() { 
     var oldHTML = $(this).html().trim(); 
     $(this).html('<input type=\'text\' value=\'' + oldHTML + '\' size=\'' + ((oldHTML).length + 2) +'\' />'); 
    }, 
    function() { 
     newHTML = $('input', this).val(); 
     var oldHTML = $(this).next('td.original').children('hidden').val(); 
     if(newHTML != oldHTML) { 
      $(this).next('td.changed').html('Changed'); 
     } 
     $(this).html(newHTML); 
    }) 
}); 

но не работает. Что, по-видимому, не позволяет захватить значение скрытого поля, и я попытался выбрать его несколькими способами, но просто не могу добраться до него. Любые идеи или советы с благодарностью оценили;)

ответ

5

Вы должны использовать .N extAll()

var oldHTML = $(this).nextAll('td.original').find('input:hidden').val(); 

Почему? Потому что .next() берет следующий элемент и видит, соответствует ли он селектору. Если вы используете .nextAll(), вы получите следующий элемент, соответствующий селектору.

+0

работает как очарование! Большое спасибо! Приятно знать разницу. – Fverswijver

+0

Документация jQuery говорит, что .next() работает именно так, но не так, как это интуитивно понято. Это поведение бросило меня, когда я попытался сделать то же самое в последнее время. – ICodeForCoffee

1

Попробуйте

$(this).next('td.original').find('input:hidden').val(); 
+0

Нет, он продолжает возвращать 'undefined' – Fverswijver

+0

Возможно, это не помогло решить исходную проблему, но это помогло мне с проблемой синтаксиса. Благодарю. – madcolor

0
var oldHTML = $(this).next('td.original').children(':hidden').val(); 
+0

также возвращает 'undefined' – Fverswijver

0

Заменить

var oldHTML = $(this).next('td.original').children('hidden').val(); 

С

var oldHTML = $(this).next('td.original').find('input:hidden').val(); 
Смежные вопросы