2013-02-20 27 views
1

內我有這個JavaScript函數:功能的JavaScript函數和jQuery選擇從HTML

function clearDiv(div_id) { 
    alert(div_id); 
    $(div_id).empty(); 
} 

而且下面的HTML:

<input value="Clear" type="button" onClick="clearDiv(div_to_clear)" /> 

<div id="div_to_clear"> 
    <!-- more html --> 
</div> 

爲什麼是它上面都會覺得JavaScript的DIV ID爲div_to_clear對象,並使用$選擇訪問它?

如果我所做的輸入爲:

<input value="Clear" type="button" onClick="clearDiv('div_to_clear')" /> 

我需要我的功能改變

function clearDiv(div_id) { 
    alert(div_id); 
    $('#' + div_id).empty(); 
} 

有沒有這方面有任何文檔?使用一種方法或另一種方法有優勢嗎?

+1

我無法重現你描述的行爲。你確定'div_id'沒有在全球其他地方設置嗎? – j08691 2013-02-20 21:18:03

+0

我肯定它不是。 – 2013-02-20 21:18:52

+0

@ j08691 [我已經能夠cc](http://jsfiddle.net/V6dXN/) – Daedalus 2013-02-20 21:19:58

回答

5

IE(和鉻在用於兼容性的努力)將與IDS元素的名稱的窗口上創建屬性,對應於那些元素。

在第一個例子中是路過window.div_to_clear直接指向您的元件。第二,你傳遞一個字符串告訴jQuery要選擇哪個元素。

第一個是不規範的行爲,所以你不應該依賴於它。

+0

因爲我現在沒有安裝firefox,第一個方法會將'div_to_clear'作爲字符串傳遞給我的js功能? – 2013-02-20 21:22:09

+0

@SotiriosDelimanolis號碼正如前面在這個答案中所指出的那樣,一個未加引號的字符串被視爲一個變量。 – Daedalus 2013-02-20 21:26:59

+0

我其實只是在Firefox中嘗試過它,它對我來說是新的。不過,我不會依賴它。如果沒有引用它,它不是一個字符串。 – Dennis 2013-02-20 21:27:14

1

第一個實際上是一個通過window.div_to_clear(全局變量)訪問DOM節點的瀏覽器bug(他們稱之爲功能) - 並且jQuery創建了它圍繞元素的包裝。由於傳統原因,它仍然存在於當前的瀏覽器中,但不推薦使用。你真的應該使用選擇器解決方案。

1

這是因爲有一個廣泛實現的(雖然not最佳實踐)通過瀏覽器的方法來自動將與id的HTML元素到他們的相關變量名。例如:

<div id="someId"></div> 

最終將僞創建變量someId其中認爲html元素。

這些問題對行爲類似的信息:

Do DOM tree elements with ids become global variables?

Where does the variable holding an element with an id get stored?

Element accessible with ID

這裏是表示以該方式訪問ID是比使用document.getElementById慢jsperformance測試:http://jsperf.com/global-id-vs-document-getelementbyid