jQuery,重复选择器

时间:2019-07-09 19:18:58

标签: javascript jquery

我有这段代码警告我重复$("#demo-select")使用选择器:

    let demoSelect = $("#demo-select").val();
        if (demoSelect){

            $('#days_count').show();
        }

        $("#demo-select").change(function(){
            if (this.value){
                $('#days_count').show();
            } else {
                $('#days_count').hide();
            }

        });

如何编写该代码以免重复?

3 个答案:

答案 0 :(得分:2)

您收到警告,因为查询DOM中的选择器非常昂贵。

因此,您应该缓存jQuery对象的副本,然后在需要时引用它。

let $demoSelect = $("#demo-select");
let demoSelectVal = $demoSelect.val();

if (demoSelectVal){
  $('#days_count').show();
}

$demoSelect.change(function(){
  if (this.value){
    $('#days_count').show();
  } else {
    $('#days_count').hide();
  }
});

答案 1 :(得分:2)

警告来自重复使用$('#demo-select')。您可以创建一个变量来保存该值并重新使用它。这是首选,因为DOM访问是一个(相对)缓慢的操作,应尽可能避免。

let $demoSelect = $("#demo-select").change(function() {
  if (this.value) {
    $('#days_count').show();
  } else {
    $('#days_count').hide();
  }
});

if ($demoSelect.val()) {
  $('#days_count').show();
}

但是,您可以通过使用toggle()并在加载时触发change事件来避免此问题并使逻辑更加简洁:

$("#demo-select").change(function() {
  $('#days_count').toggle(!!this.value);
}).trigger('change');

答案 2 :(得分:1)

可能是您的IDE或某些整理工具发出的警告。

您正在捕获let demoSelect = ("#demo-select");中的元素,但是随后通过$("#demo-select").change...重新选择了元素,则应该只重用demoSelect

let demoSelect = $("#demo-select");

if (demoSelect.val()) {
    $('#days_count').show();
}

demoSelect.change(function() {
    if (this.value) {
        $('#days_count').show();
    } else {
        $('#days_count').hide();
    }
});

请注意,.val()的检查现在位于if语句中。