更改button文本jQuery的移动

我正在使用新的jQuery Mobile 1.0 alpha 1版本来构build一个移动应用程序,我需要能够切换button的文本。 切换文本工作正常,但只要您执行文本replace的CSS格式化被破坏。

搞砸的格式的屏幕截图: http : //awesomescreenshot.com/03e2r50d2

<div class="ui-bar"> <a data-role="button" href="#" onclick="Podcast.play(); return false" id="play">Play</a> <a data-role="button" href="#" onclick="Podcast.download(); return false" id="download">Download</a> <a data-role="button" href="#" onclick="Podcast.consumed(); return false" id="consumed">Mark Old</a> </div> $("#consumed").text("Mark New"); 

当你创buildbutton时,它会添加一些额外的元素,一些内部的<span>元素看起来像这样:

 <a data-role="button" href="#" onclick="Podcast.consumed(); return false" id="consumed"> <span class="ui-btn-inner ui-btn-corner-all"> <span class="ui-btn-text">Mark Old</span> </span> </a> 

要改变文本,你需要这个select器:

 $("#consumed .ui-btn-text").text("Mark New"); 
 <a data-role="button" href="#" id="consumed">Mark Old</a> 

你想要:

 $('#consumed').text('Mark New'); $('#consumed').button('refresh'); 

原因是使您的更改与未来版本的jQuery移动版向后兼容。

我通过这个在线阅读,并认为我可能有一个更简单的解决scheme。 它绝对适用于你正在变成一个button与data-role =“button”属性的链接。

只需将该button的文本放在一个单独的区域中,然后在JavaScript中更改该区域的内容即可。

例如

 <a data-role="button" href="#" id="consumed"><span id="oldBtnText">Mark Old</span></a> 

然后一个简单的

 $('#oldBtnText').html("Old"); 

将做这项工作。 如果jQuery改变它们的结构,这也不应该是一个问题。

我写了一个简单的插件来为基于链接的button或者<input type="button">button做这个。 所以,如果你有

 <input type="button" id="start-button" val="Start"/> 

要么

 <a href="#" data-role="button" id="start-button">Start</a> 

无论哪种方式,您可以更改显示的文字

 $("#start-button").changeButtonText("Stop"); 

这是插件:

 (function($) { /* * Changes the displayed text for a jquery mobile button. * Encapsulates the idiosyncracies of how jquery re-arranges the DOM * to display a button for either an <a> link or <input type="button"> */ $.fn.changeButtonText = function(newText) { return this.each(function() { $this = $(this); if( $this.is('a') ) { $('span.ui-btn-text',$this).text(newText); return; } if( $this.is('input') ) { $this.val(newText); // go up the tree var ctx = $this.closest('.ui-btn'); $('span.ui-btn-text',ctx).text(newText); return; } }); }; })(jQuery); 

…因为在jQuery Mobile如何呈现这些button的时候依赖于你的代码并不是一个好主意。 编程规则:如果你要使用黑客,将其隔离到一个logging良好,可重用的代码块。

这适用于我:

 $('#idOfOriginalButton').prev('.ui-btn-inner').children('.ui-btn-text').html('new text'); 

解决scheme来自: http : //forum.jquery.com/topic/changing-text-works-except-for-buttons

对于像标记一样

 <button id="consumed">Mark Old</button> $("#consumed").html("Mark New"); $("span > span", $("#consumed").parent()).html("Mark New"); 

在新的jquery移动版本中有一个内部的跨度标签内的button。

因此,您不必更改“a”标签的文本,而是更改内部跨度的文本。

例如

$(“#define .ui-btn-text”)。text(“test”);

从JQM 1.3.1开始(可能更早?)simple .text()似乎被支持。

对于那些对简单解决scheme感兴趣的人,我创build了一个名为Audero Text Changer的插件。

出于某种原因,我没有“ui-btn-text”分类的跨度,我第一次想改变button文本。 所以我解决这个问题:

 var button = $("#consumed"); var innerTextSpan = button.find(".ui-btn-text"); // not initialized - just change label if (innerTextSpan.size() == 0) { button.text(label); // already initialized - find innerTextSpan and change its label } else { innerTextSpan.text(label); }