2012-02-24 44 views
2

假設我有以下的HTML:如果.text()在按鈕上被調用,我可以檢測嗎?

<button class="inforTextButton" id"myButton"> 
    <span class="leftSlice"></span> 
    <span class="centerSlice">Approved</span> 
    <span class="rightSlice"></span> 
</button> 

如果我叫jQuery中下面的命令:

$("#myButton").text("New Text"); 

它將取代所有文字跨度。

無論如何檢測此事件嗎?當時我想要做的是防止它取代所有內容,而改變centerSlice。

現在我知道我可以打電話給:$("#myButton").find(".centerSlice").text("New Text")但那不是我的問題的重點。在未來的情況下,我的按鈕實施更改,我試圖看看這是否有可能以某種方式來檢測我失蹤。

我試過textchange - 似乎這不會觸發按鈕。

感謝

+0

謝謝兩位。以下似乎很好地工作到目前爲止我唯一關心的是在jQuery中的新功能..我不能假設jquery的副本爲我的情況..'$ .fn.baseText = $ .fn.text; \t $ .fn.text =函數(文本){ \t \t/* jQuery函數來改變centerSlice文本*/ \t \t變種centerslice = this.children( 「centerSlice。」); \t \t如果(centerlice.length> 0){ \t \t \t centerlice.text(text); \t \t \t return this; \t \t} \t \t其他{ \t \t \t回this.baseText(文本) \t \t} \t};' – Tim 2012-02-24 21:48:11

回答

2

文本功能存儲在$.fn.text這意味着你可以做的是取代該功能:

var oldTextFunc = $.fn.text; 
$.fn.text = function newTextFunc(text) { 
    /* jQuery function to change the centerSlice text */ 
}; 

如果要恢復jQuery的文本功能:

$.fn.text = oldTextFunc; 
+0

如果不是按鈕似乎無法解決這個問題,任何方法都可以從內部調用原始文本函數。儘管sub似乎很酷,但我不能在我試圖解決的情況下在jQuery的副本上工作。 – Tim 2012-02-24 21:34:18

+0

我不太清楚你的第一句話是什麼意思,但你可以使用'.apply'或者使用'$ .fn.oldTextFunc = $ .fn.text;'而不是'var oldTextFunc = $。 fn.text;'只需調用'$('。selector')。oldTextFunc();' – 2012-02-24 21:37:15

1

這聽起來像是一個完美的使用.sub(),這將允許您創建的jQuery的副本,並覆蓋缺省行爲.text()

var myjQuery = jQuery.sub(); 

myjQuery.fn.text = function() { 

    if (this.is("button")) { 
     alert("do something special with button"); 
    } 
    else { 
     return jQuery.fn.text.apply(this, arguments); 
    } 
}; 
myjQuery("#myButton").text("New Text");​ 

Example on jsfiddle

+0

哇感謝一個快速的答案...我開始尋找一種安全的方式來覆蓋功能,但沒有意識到最好的方式來做到這一點。 – Tim 2012-02-24 21:07:18

+0

我應該擔心的是:這個方法在jQuery 1.7中被棄用,並且會被移動到jQuery 1.8中的一個插件中? – Tim 2012-02-24 21:11:13

+0

請注意,您的所有代碼都需要使用jquery的這個副本。任何使用真正的jQuery的代碼將繞過你的'文本'覆蓋。 – 2012-02-24 21:12:19

相關問題