jQuery – 获取与所选输入的id同名的下一个元素

首先,我想为那里可怕的头衔道歉,但这是我能想到总结我的问题的最佳方式。

目前,我使用一个jQuery脚本,在input:textblur ,检查input:text的文本值是否大于一定量。 如果没有,输入会突出显示为红色 – 但我接下来想要发生的是在相邻列中有一个

来更改它的文本。

我的HTML看起来像这样:

    

我的jQuery / css是:

  .fail{ border:2px red solid; }   /* Inline, onBlur validation Text */ $('input:text').blur(function() { if ($(this).val().length <= 2) { $(this).attr('class', 'fail'); }else{$(this).attr('class', '');} });  

是否有可能在blur某种方式调用与所选输入的id同名的下一个元素,然后更改它的文本? 我知道这一定是一个难以解决的动态难题,但这是我真正需要的东西。

在过去,我通过重复每个元素的代码来实现相同的效果,但这不是真正适合的。

感谢您给我的任何建议!

zzzzBov是正确的,但是使用上下文来提高效率和/或标记名会更好。 另外添加一个引用$(this)的变量。

 var $this = $(this); $('p[name="'+$this.attr('id')+'"]', $this.closest('tr')).text('foo bar baz'); 

评论后编辑上面和zzzzBov的答案之间的区别是:

 $('[name="'+$(this).attr('id')+'"]') // will start traversing the DOM starting at the beginning of the // document. Largest search. $('p[name="'+$this.attr('id')+'"]') // will first call getElementsByTagName and try to find a match, smaller search. $('p[name="'+$this.attr('id')+'"]', $this.closest('tr')) // will only search the contents of the closest('tr') tag // that is an ancestor of your input. Even smaller search. 

一般而言,jQuery选择器更具体,可以提高性能。 另外使用变量来存储选定的元素,例如var $this = $(this);var $myElement = $('#myElement')比反复创建相同的选择器更有效。 请记住,jQuery与选择器一样高效,但是由你来决定它们的潜力。

blur回调的上下文中:

 $('[name="'+$(this).attr('id')+'"]').text('foo bar baz');