【问题标题】:use incremented class name to apply classes to a similarly named div使用递增的类名将类应用到类似命名的 div
【发布时间】:2014-03-28 00:09:16
【问题描述】:

我想根据具有类似名称的类的文本输入来操作 div。

例如,如果输入名为 foo1,我希望对 div1 进行操作,如果输入为 foo2,我希望对 div2 进行操作。

这是我正在使用的代码 sn-p:

var i = (i + 1);
$('.pI_nameText + (i) ').focus( function() {
    $(".nameLights + (i) ").addClass("lightOverlay"); });
$('.pI_nameText + (i) ').blur( function() {
    if ($(".pI_nameText + (i) ").val() == '') {
        console.log($(".pI_nameText + (i) ").val());
        $(".nameLights + (i) ").removeClass('lightOverlay')
    }
})

这里是这个代码的小提琴:http://jsfiddle.net/W99vQ/

我想我快到了,因为它可以在没有递增的情况下工作,但不能使用它,所以它应该是我正在使用的语法。

【问题讨论】:

标签: jquery html css forms input


【解决方案1】:

最好将元素用一个公共类分组,并将其用作选择器,如

<input class="pI_nameText name1"></input>
<div class="nameLights"></div>
<input class="pI_nameText name2"></input>
<div class="nameLights"></div>
<input class="pI_nameText name3"></input>
<div class="nameLights"></div>
<input class="pI_nameText name4"></input>
<div class="nameLights"></div>
<input class="pI_nameText name5"></input>
<div class="nameLights"></div>

然后

jQuery(function () {
    $('.pI_nameText').focus(function () {
        $(this).next().addClass("lightOverlay");
    }).blur(function () {
        if (this.value == '') {
            $(this).next().removeClass('lightOverlay')
        }
    })
})

演示:Fiddle

【讨论】:

  • 我遇到的一个问题是我实际上将这些输入中的每一个都包裹在一个 div 中,所以现在似乎“索引”不再起作用了...jsfiddle.net/6cte3/3
  • @sventizzle 因为现在目标 div 不是输入的下一个兄弟,它是输入父级的下一个兄弟...jsfiddle.net/arunpjohny/6cte3/4 - 有时遍历/选择器必须如果你改变标记结构就会改变
  • 因此您可以使用 .parent().next() 访问“索引”,这很棒。我对javascripting真的很陌生,所以这些细节不属于我的新手知识。非常感谢。
  • @sventizzle 也许你应该通过api.jquery.com 一次...通过选择器、遍历和操作方法
  • 我肯定会看更多,我已经尝试阅读文档,但是作为我通过示例学习的艺术家,文档有一些但可能还不够,或者至少不是那些看起来合适的。如何访问 div + idx -1 ?您提供的代码似乎改变了“下一个” div 上的类而不是当前的类......看这个小提琴:jsfiddle.net/6cte3/5
【解决方案2】:

您需要遍历所有元素,然后绑定您的处理程序。

for(var j = 1; true; j++)
{
  if($('pI_nameText' + i).length == 0)
  {
    break;
  }
  $('pI_nameText' + i).focus(function(){
    $(".nameLights + (i) ").addClass("lightOverlay"); 
  });
  $('.pI_nameText + (i) ').blur( function() {
    if ($(".pI_nameText + (i) ").val() == '') {
      console.log($(".pI_nameText + (i) ").val());
      $(".nameLights + (i) ").removeClass('lightOverlay');
  });
}

但是我强烈建议不要再这样做了!通过查看您的小提琴,如果您可以访问 html,我可能会向您的 pI_ 元素添加另一个类,如下所示:

<input class="pI_nameText1 anotherClass"></input>
<div class="nameLights1 anotherClass_Lights"></div>

然后一次性绑定它们。

$('.anotherClass').focus(function(){
  $(this).next('.anotherClass_Lights').addClass('lightOverlay');
});
$('.anotherClass').blur(function(){
  $(this).next('.anotherClass_Lights').removeClass('lightOverlay');
});

【讨论】:

  • 请看这个小提琴:jsfiddle.net/6cte3/3 看看你的代码是否仍然有意义,输入实际上都是用 div 包装的......我认为这会破坏增加的能力
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2020-08-20
  • 2021-06-10
  • 1970-01-01
  • 2014-02-02
相关资源
最近更新 更多