2009-10-03 53 views
0

我的输入元素后面跟着一个div。我想将div的宽度设置为前一个输入元素的宽度。是否可以将元素的宽度设置为前一个元素的宽度?

<input type="text" class="input" size="100" name="data"/> 
<div class="inputHelp"> enter data above </div> 

<input type="text" class="input" size="80" name="moredata"/> 
<div class="inputHelp"> enter more data above </div> 

在每个实例中,.inputHelp类的宽度应与它之前的输入元素的宽度相同。

使用下一个选择器,我能够获取输入元素的宽度,后跟inputHelp div。 但是,当试图设置下面的inputHelp div的宽度时,它会在页面上设置所有inputHelp div的宽度。我怎样才能限制它只设置下一个inputHelp的宽度,然后迭代页面上的所有其他input + inputHelp组合?

这里是我当前的jQuery代码:

$('.input + .inputHelp').width($('.inputHelp').prev('.input').width()); 

回答

3
$('.input + .inputHelp').each(function() { 
    $(this).width($(this).prev('.input').width(); 
}); 

到解决方案的关键是使用$(this),而不是$('.inputHelp')。后者抓取全局的.inputHelps,而不是您正在循环的特定的.inputHelps。

0

我在想,是否需要每个解决方案 - 我只是要启动我的开发环境并测试 - 更多的只是我的一个好奇心,因为您已经标记了Stuart B的答案正确(它是)。

将以下代码不等于:

$('.input + .inputHelp').width($(this).prev('.input').width()); 

我会评论更新这个时候我已经修修补补,而是作为一个人学习jQuery的myselft,我很愿意听到的话,他们是等价如果不是原因。

感谢, 特里

+2

这是行不通的。它的值取决于上下文,它只能在闭包中操作(如每个(fn))... – James 2009-10-03 18:41:05

相关问题