代码之家  ›  专栏  ›  技术社区  ›  Mathieu Mourareau

用jquery找不到最近的标签

  •  0
  • Mathieu Mourareau  · 技术社区  · 5 年前

    我用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 回复  |  直到 5 年前
        1
  •  2
  •   Ali Sheikhpour    5 年前

    因为这个元素有多个类名,所以必须使用 includes 而不是 = 操作员。

    输入的ID也是 radio-group-1548153603981-other-value 你漏了一个字 value 因为你的HTML是由第三方软件生成的,所以我使用 .replace 省略 -价值 从输入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>
        2
  •  1
  •   Snake Eyes    5 年前

    使用 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')
            }
        }
    });
    
        3
  •  1
  •   ARr0w    5 年前
    <label for="radio-group-1548153603981-other">
    

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

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

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

    HTML标记示例:

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

    jQuery选择器:

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

    标签不能环绕输入字段