2013-10-28 31 views
3

這是更多broad question的一部分。它受到的關注度不高,請讓我問一下我無法實現的唯一部分。如何註冊一個dom對象的類似jquery的javascript函數?說我有以下的HTML頁:如何在javascript中定義dom對象的函數

<html><body> 
    <div id = "table"/> 
    <div id = "chart"/> 
</body></html> 

,並希望能夠調用$('#table').update()$('#chart').update()?我需要這些更新函數來包含不同的邏輯和局部變量,例如不同的url來加載數據。對不起,可能是noob。

UPDATE

如果我理解正確,插件是一個全局命名空間,可以處理任何對象的函數。我寧願將不同的功能與不同的元素聯繫起來。那是因爲我認爲將不同的對象與不同的對象關聯起來更容易,而不是寫一個更新函數,對於每個對象必須研究的更新函數是適用的,如果是的話,如何。

+2

是'更新()'插件你寫的嗎?你可以在包含不同數據的元素上使用'data- *'變量,並在你的'update()'方法中處理它們的邏輯。 –

+0

你問如何[創建一個插件](http://learn.jquery.com/plugins/basic-plugin-creation/)? – George

+0

我不知道插件是否是解決方案,並相應地更新了我的問題 – latheiere

回答

3

你不需要jQuery的這一點。 DOM元素是對象,所以你可以給他們任何你想要的方式:

var table = document.getElementById('table'); 
table.update = function() { 
    this.innerHTML += 'table updated '; 
}.bind(table); 

var chart = document.getElementById('chart'); 
chart.update = function() { 
    this.innerHTML += 'chart updated '; 
}.bind(chart); 


document.getElementById('table').update(); 
document.querySelector('#chart').update(); 

例子:http://jsbin.com/uReyIRi/1/edit

+0

似乎這個'.bind'是我錯過的東西! – latheiere

+1

「這個綁定的東西」用於確保函數在它定義的對象的上下文中運行。很高興有幫助。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind – Tibos

4

什麼你後jQuery's fn.extend()

$.fn.extend({ 
    update: function() { 
     /* Required code. */ 
    } 
}); 

然後,你可以簡單地調用.update()一個jQuery對象上執行該功能:

$('myElement').update(); 

作爲一個例子使用,如果我們想記錄一個元素的id,我們可以將update()函數定義爲:

$.fn.extend({ 
    update: function() { 
     console.log("ID = " + this.id); 
    } 
}); 

然後調用:

$('#table').update(); 

這將日誌:

ID =表

+3

小錯字在你回答;上傳應該更新;) – Ben

+0

@本好好喊!固定。 –

+0

非常感謝@JamesDonnelly,那部分也非常有幫助 – latheiere

相關問題