2012-02-24 39 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

相关问题