更改按鈕文本jQuery的移動


Answers

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

你想要:

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

原因是使您的更改與未來版本的jQuery移動版向後兼容。

Question

我正在使用新的jQuery Mobile 1.0 alpha 1版本來構建一個移動應用程序,我需要能夠切換按鈕的文本。 切換文本工作正常,但只要您執行文本替換的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");



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




我寫了一個簡單的插件來為基於鏈接的按鈕或者<input type="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 id="consumed">Mark Old</button>

$("#consumed").html("Mark New");
$("span > span", $("#consumed").parent()).html("Mark New");



出於某種原因,我沒有“ui-btn-text”分類的跨度,我第一次想改變按鈕文本。 所以我解決這個問題:

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);
}