2012-10-05 122 views
2

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

我能想到的唯一方法就是通过检查他们不是我想要保留的值。希望有一种更简单,更快捷的方式?是否有可能使用jQuery检查元素是否是动态创建的?

+1

你可以控制如何将元素添加到DOM?如果不是这样,我认为除了向原始元素添加'class'属性之外,没有什么可以做的。无论哪种情况,您都需要使用某种标记属性来区分一个组。 – Blender

+0

禁用JavaScript? – powtac

+0

@Blender我使用jQuery的UI滑块通过物理附加DOM选项元素来创建元素。我喜欢班级的想法,这很好,很简单 - 我想如果我想,我也可以只添加一个班级到新的元素 - 他们都以同样的方式工作。 –

回答

6

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

当然,你总是可以创建自己的方法来做到这一点。例如,您可以将一个"data-dynamic" HTML属性或一个dynamic CSS类添加到动态创建的选项,然后基于该选项进行过滤。

1

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

1

如果所有的动态元素都是由您创建的,那么您可以使用HTML5 data-attribute在元素上存储一小段元数据以使其变得无足轻重。

例如,

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

然后你可以找到通过所有动态元素:

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

当然,如果你知道什么类型的元素,这可能出现在你可以把它更加高效:

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

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

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

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元素,但上面是足够艰难,从触摸屏上的内存键入。