jQuery – 获取与所选输入的id同名的下一个元素
首先,我想为那里可怕的头衔道歉,但这是我能想到总结我的问题的最佳方式。
目前,我使用一个jQuery
脚本,在input:text
上blur
,检查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');