2012-11-08 96 views
-2

我正在製作一個小腳本,其中一個主要函數的arg輸入是一個元素。爲了確保原始JS適用於這些東西,我正在做theelement.value以獲取變量的值。不幸的是,如果thelement是一個jquery函數,則不起作用,如$('#foo')。我需要這種兼容性的一些其他原因是我需要訪問theelement.style,再一次jquery不支持。我知道有這些jQuery的解決方法(.css(), .val()等),但如果我使用這些,那麼常規js輸入(document.getElementbyId('foo'))將無法正常工作。有什麼方法可以使用一個「屬性」並使其對所有元素的輸入(包括像原型和Dojo這樣的庫中的東西)具有通用性?jQuery變量的Javascript屬性

+3

我真的不清楚你在問什麼。也就是說,所有這些庫都應該允許您訪問它們的API包裝的原始元素。例如,如果你想通過jQuery獲得一個(原始)DOM元素,你可以使用'$(「#foo」)[0]'。 – millimoose

+0

秒@millimoose建議。將所有非DOM元素參數轉換爲DOM元素。 – ZenMaster

回答

1

不,不可能讓所有東西都具有普遍性。

如果您想處理DOM元素,則輸入需要是DOM元素,而framworks都可以獲取DOM元素。你不能奇蹟般地製作一個可以與任何庫一起工作的腳本,這就是爲什麼通用插件通常有庫特定的擴展來添加支持。

0

就像你有一個函數,它接受一個參數,並且當你通過不同類型,這樣的說法你有問題,這聽起來對我說:

function doSomething(element) { 
    // do something with element 
} 

你提到要元素有時是一個jQuery對象,有時只是一個DOM對象,然後你也提到了其他庫(原型,Dojo)。

首先,如果您只是使用一致的類型調用您的函數,您的問題將完全消失。所有庫中最簡單的類型都是DOM元素。因此,如果您只是強制將該元素作爲DOM對象引用而不是jQuery對象或任何其他庫對象傳遞,那麼您的問題將完全消失。如果調用者正在使用其他庫,然後想要調用您的函數,則他們可以始終從該庫中獲取DOM對象並傳遞實際的DOM對象。例如,在jQuery中,您可以像這樣獲得一個DOM對象:$(「#foo」)。get(0)

如果你想使它更通用並且接受多種類型,那麼你必須編寫代碼檢測可能傳遞的每種類型,並從每種類型中獲取DOM對象,以便可以完全相同地處理它們。例如,如果你想檢測無論是DOM對象的jQuery對象,你可以這樣做是這樣的:

function doSomething(element) { 
    // normalize element to be just a DOM object 
    // if it's a jQuery object, then reach in to get the first DOM object 
    if (element.jquery) { 
     element = element.get(0); 
    } 

    // do something with element here which is a DOM object 
} 

如果你想檢測其它庫的對象太多,那麼你必須寫類似檢測每個其他庫的代碼並從該其他庫的對象中獲取實際的DOM對象。