用jQuery替换空的选择框

时间:2011-07-23 00:47:34

标签: jquery select replace each

我正在尝试用文本消息替换所有空的选择框,但它无法正常工作。这是我的jQuery:

var s = $("table.preference select option");
if(s.length == 0){
   s.parents("td").html("No more preferences to add!");
}

我也试过了:

$("table.preference select option").each(function(){
   if($(this).length == 0){
      $(this).parents("td").html("No more preferences to add!");
   }
});

但两者都不起作用。我在两个不同的表中有两个select标签 - 我需要jQuery来查找任何空的选择框并用文本消息替换其表格单元格。有人知道我哪里出错吗?

5 个答案:

答案 0 :(得分:2)

如果表中的所有select-elements之一中至少有一个option-element,那么第一种方法将无效。

不使用$ .each()的解决方案:

 $("table.preference select:not(:has(option))")
  .parents("td").html("No more preferences to add!");

答案 1 :(得分:1)

试试这个:

$("table.preference select").each(function() {
    if ($(this).children("option").length === 0) {
      $(this).parents("td").html("No more preferences to add!");
    }
});

根据@ Kon的建议,如果你想查看可能的optgroup标签,你可以试试这个:

$("table.preference select").each(function() {
    if ($("option", this).length === 0) {
      $(this).parents("td").html("No more preferences to add!");
    }
});

这会检查options内部select以及任何optgroups内的{{1}}。

此处示例:http://jsfiddle.net/UEaQU/1/

答案 2 :(得分:1)

尝试这样的事情:

$("table.preference select").each(function(){
   if($(this).children().length == 0) {
      $(this).parents("td").html("No more preferences to add!");
   }
});

答案 3 :(得分:1)

您是否尝试过其他选择器?在我的头顶:

var s =  $("table.preference select:empty");
if(s.length != 0){
   ...
}

答案 4 :(得分:0)

这适合我。

  • 检测任何带有空选项的选择框。
  • 过滤包含一些文字“abc”
  • 的任何div

JSFIDDLE


    $("div>select:not(:has(option))").hide();

$('div').filter(function () {
    if($(this).text().trim().toLowerCase() === 'abc'){
        $(this).hide();
    };
})