找不到与Jquery最接近的标签

时间:2019-01-23 07:55:32

标签: jquery

我找不到与Jquery最接近的标签。

标签的ID与输入的ID不同:

$(document).delegate("input[type=text]", "keyup", function() {

  if (this.className == 'other-val') {

    $label = $('label[for="' + this.id + '"]');

    if ($label.length > 0) {
      console.log('ok')
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="radio-group-1548153603981-other">Other
    <input type="text" id="radio-group-1548153603981-other-value" class="other-val user-success" style="display: inline-block;">
    </label>

希望有人可以帮助我

4 个答案:

答案 0 :(得分:2)

由于该元素具有多个类名,因此必须使用includes而不是=运算符。

输入的ID也为radio-group-1548153603981-other-value,并且您错过了标签中的单词value,并且HTML是由第三方软件生成的,因此我使用.replace来省略 -value 来自输入ID。

$(document).delegate( "input[type=text]", "keyup", function() {

        if(this.className.includes('other-val')){

            $label = $('label[for="'+ this.id.replace("-value","") +'"]');

            if ($label.length > 0 ) {
                console.log('ok')
            }
        }
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="radio-group-1548153603981-other">Other
<input type="text" id="radio-group-1548153603981-other-value" class="other-val user-success" style="display: inline-block;">
</label>

答案 1 :(得分:1)

使用on代替delegate,使用大多数jQuery功能,如果使用jQuery,则不要结合使用纯DOM javascript。

我看到标签是input的父标签,因此请使用closest方法。

$(document).on( "keyup", "input[type='text']", function() {

   if($(this).hasClass('other-val')) {
        $label = $(this).closest("label"); 

        if ($label.length > 0 ) {
            console.log('ok')
        }
    }
});

答案 2 :(得分:1)

<label for="radio-group-1548153603981-other">

使用jquery获取标签上方的可能方法。

  1. $('label[for$=other]');-“ $ =”忽略“ other”之前的所有文本,并找到控件
  2. $(this).siblings('label[for$=other]');-在其任何同级元素的回调函数中。
  3. $('label[for=radio-group-1548153603981-other]')

答案 3 :(得分:-1)

您的标记让我有些困惑。试试这个:

HTML标记示例:

<div>
  <label>some text</label>
  <input type="text">
</div>

jQuery选择器:

let $input = $('input[type="text"]');
let $label = $input.parent().find('label');

标签不必围绕输入字段