2012-10-05 186 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元素,但上面是足夠艱難,從觸摸屏上的內存鍵入。