2010-05-20 57 views
1

我有一个表奠定了这样的:从明年TD内选择隐藏输入[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 TD其中把它变成一个文本框。一旦我将鼠标悬停在外,我想检查隐藏字段的原始值,并将图像更改为两个不同的图像。我已经有这个:

$(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 2010-05-20 17:52:09

+0

jQuery文档说.next()完全按照这种方式工作,但不是以直观的方式理解。当我最近尝试做同样的事情时,这种行为使我感到不安。 – ICodeForCoffee 2010-05-20 17:57:32

1

尝试

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

不,它总是返回'undefined' – Fverswijver 2010-05-20 17:30:35

+0

这可能没有帮助解决原始问题,但它帮助我解决了一个语法问题。谢谢。 – madcolor 2015-07-24 18:41:33

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

还返回'undefined' – Fverswijver 2010-05-20 17:31:08

0

更换

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

随着

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