jQM - Change button text plugin

by Dragan Gaić

HTML

<link rel="stylesheet" href="http://jeromeetienne.github.com/jquery-mobile-960/css/jquery-mobile-fluid960.css">
<script src="http://timeago.yarp.com/jquery.timeago.js"></script>
<script src="http://imakewebthings.github.com/jquery-waypoints/waypoints.min.js"></script>
<!DOCTYPE html>
<html>
<head>
    <title>jQM Complex Demo</title>
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi"/>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
    <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>    
</head>
<body>
    <div data-role="page" id="index">
        <div data-theme="a" data-role="header">
            <h3>
                First Page
            </h3>
            <a href="#second" class="ui-btn-right">Next</a>
        </div>

        <div data-role="content">
            <a data-role="button" id="custom-btn">This is a button text</a>
        </div>

        <div data-theme="a" data-role="footer" data-position="fixed">

        </div>
    </div>    
</body>
</html>

JavaScript

$(document).on('pagebeforeshow', '#index', function(){       
    $('#custom-btn').changeButtonText('This is a new text');
});

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