jquery中的remove()不起作用

时间:2011-07-24 11:10:56

标签: jquery

大家可以告诉我为什么remove()在以下代码中不起作用

  $("#mydropdown_for_month").change(function(){
  $("#mydropdown_for_day").empty();
   for (var i=1; i<=31; i++)
   {options += '<option>' + i+'</option>';}
   $('#mydropdown_for_day').after().html(options);

我有两个带有ID mydropdown_for_monthmydropdown_for_day的选择框。问题是,当我在第一个下拉列表中点击任意一个月时,第二个下拉列表通常会显示来自for循环的所有日期,但是当我再次更改月份时,从feb到4月,第二个下拉列表显示从1到31两次(当我选择4月时,第一次选择月份可能是1到31,第二次可能是1到31)。所以为了解决这个问题,我将以下语句$("#mydropdown_for_day").empty();放在第一个下拉列表的每个选项中,第二个下拉列表中的所有先前选项都被删除但没有用。

请帮助我在哪里犯错?

2 个答案:

答案 0 :(得分:2)

如果你的目标是用新选项替换当前选择框中的选项,我会这样做:

$("#mydropdown_for_month").change(function(){
    var options, i;

    options = $("#mydropdown_for_day")[0].options;
    options.length = 0;
    for (i = 1; i <= 31; i++) { // I'm guessing you'd want to use a different upper limit here for different months
        options[options.length] = new Option(i, i);
    }
});

它比构建HTML字符串更直接。 Option构造函数最多接受四个参数:要显示的文本,值,选项是否为默认值以及是否已选中。原始options元素上的select伪数组(它实际上不是数组)包含选项。您可以通过在最后使用的索引之上分配索引(如上所述),或通过调用其add方法(而非push,就像添加数组一样)来添加它。


更新:您已经问过

  

但是我的代码出了什么问题......哪里出错了?

从根本上说,错误在于你不是如何添加/删除选项;因此以上。它似乎应该工作(毕竟,这是你在HTML中指定它们的方式),但根据我的经验,它不能很好地跨浏览器。上述内容适用于我见过的每个浏览器。

其他细节:

  • 你没有任何参数调用after,这没有任何意义; after用于在之后插入内容,因此您必须说出内容是什么。如果出现错误,我不会感到惊讶。
  • 您从未声明或初始化options变量。

答案 1 :(得分:0)

如果您想删除所有可以使用的选项:

 $("#mydropdown_for_day option").remove()