是否可以使用jQuery来检查元素是否是动态创建的?

时间:2012-10-05 08:36:43

标签: jquery

我正在使用jQuery将新的<option>标记添加到<select>字段,在某些情况下,我需要删除这些选项而不知道它们的值。
是否可以删除jQuery创建的所有选项,同时保留原始选项的原样?
我能想到的唯一方法是检查它们不是我想要保留的值。希望有更简单,更快捷的方式吗?

4 个答案:

答案 0 :(得分:6)

将元素插入DOM后,它们都是平等的;没有神奇的“动态创建”标志,你可以检查。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

e.g,

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

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

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

当然,如果您知道可能出现的元素类型,可以提高效率:

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

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

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

答案 3 :(得分: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元素做到这一点,但上面的内容很难从触摸屏上的内存中输入。