2

我正在使用 jQuery 将新<option>标签附加到<select>字段,在某些情况下,我需要在不知道它们的值的情况下删除这些选项。
是否可以删除 jQuery 创建的所有选项,同时保持原始选项不变?

我能想到的唯一方法是检查它们不是我想要保留的值。希望有更简单,更快的方法吗?

4

4 回答 4

6

一旦元素被插入到 DOM 中,它们都是相等的;没有可以检查的神奇“动态创建”标志。

当然,您始终可以创建自己的方法来执行此操作。例如,您可以将"data-dynamic"HTML 属性或dynamicCSS 类添加到动态创建的选项中,然后根据它们进行过滤。

于 2012-10-05T08:41:01.033 回答
1

您可以将属性添加到标签并对其进行过滤。例如,您可以使它们成为类的一部分appended并以这种方式删除它们。参见这个 fiddle的例子。

于 2012-10-05T08:46:36.350 回答
1

如果您已经创建了所有动态元素,那么您可以使用HTML5 数据属性在元素上存储一小段元数据,以使这变得微不足道。

例如,

element.attr("data-dynamic", "true");

然后,您可以通过以下方式找到所有动态元素:

$('*[data-dynamic="true"]')

当然,如果您知道这可能会出现在哪种类型的元素上,您可以使其更高效:

$('option[data-dynamic="true"]')

这还有更多用途,例如将数据存储在非动态创建的 HTML 中以供 JavaScript 以后使用。

注意:虽然它是 HTML5,但它在大多数浏览器 (IE4+) 中都有效,因为它与获取任何属性相同,但不同之处在于它被认为是具有 HTML5 文档类型的有效 HTML。

于 2012-10-05T08:47:10.333 回答
1

它很脏,但这里有;

$(function() {
    var myselects = $('#myselectelement');
    var myoptions = myselects.html();
    // now we know the state of the select on ready
    var resetopts = function(sel, opt)
    {
        sel.html(opt);
    }
    // call resetopts(myselects, myoptions) when you want to reset. 
});

这样您就不会添加任何额外的标记。虽然有内存成本。

我有办法用 DOM 元素做到这一点,但上面的内容很难在触摸屏上从内存中输入。

于 2012-10-05T14:15:59.023 回答