2011-10-22 13 views
8
<div data-role="collapsible" data-content-theme="e" id="collapsePlace"> 
    <h3>Place:</h3> 
    <!--things...--> 
</div> 

Come è possibile modificare dinamicamente il testo dell'intestazione <h3> ("Luogo:") nel div pieghevole?Jquery Mobile: cambia dinamicamente il testo dell'intestazione di un div pieghevole?

ho provato:

$('#collapsePlace').children('h3').text('new text'); 

e cambia il testo - ma perde tutto lo stile!

+0

ho fatto una domanda simile e credo che la risposta mi è stato fornito è meglio: http://stackoverflow.com/questions/38978102/jquery-mobile-change-the-header-of-a-listview/38980002 # 38980002 – ModusPwnens

risposta

5

La struttura HTML effettiva di un pieghevole in jQuery Mobile 1.0RC2 è la seguente (dopo che il quadro è fatto il suo passaggio in HTML):

<div id="collapsePlace" data-content-theme="e" data-role="collapsible" class="ui-collapsible ui-collapsible-collapsed"> 
    <h3 class="ui-collapsible-heading ui-collapsible-heading-collapsed"> 
     <a class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-left ui-corner-top ui-corner-bottom ui-btn-up-c" href="#" data-theme="c"> 
      <span aria-hidden="true" class="ui-btn-inner ui-corner-top ui-corner-bottom"> 
       <span class="ui-btn-text">Place: 
        <span class="ui-collapsible-heading-status"> click to expand contents</span> 
       </span> 
       <span class="ui-icon ui-icon-plus ui-icon-shadow"></span> 
      </span> 
     </a> 
    </h3> 
    <div class="ui-collapsible-content ui-body-e ui-collapsible-content-collapsed" aria-hidden="true"> 
     <!--things...--> 
    </div> 
</div> 

Il <span> elemento annidato all'interno dell'elemento <span class="ui-btn-text"> rende questo un po 'complicato. Se si desidera conservare la struttura dell'elemento <span class="ui-btn-text"> è necessario salvare il nidificato <span> elemento, sovrascrivere, e poi sostituirlo:

//run code on document.ready 
$(function() { 
    var num = 1; 
    //add click handler to link to increment the collapsible's header each click 
    $('a').bind('click', function() { 
     //cache the `<span class="ui-btn-text">` element and its child 
     var $btn_text = $('#collapsePlace').find('.ui-btn-text'), 
      $btn_child = $btn_text.find('.ui-collapsible-heading-status'); 
     //overwrite the header text, then append its child to restore the previous structure 
     $btn_text.text('New String (' + num++ + ')').append($btn_child); 
    }); 
}); 

Ecco un jsfiddle della soluzione di cui sopra: http://jsfiddle.net/jasper/4DAfn/2/

+0

funziona perfettamente, grazie mille! – Matthieu

0

una scelta facile è quello di dare la h3 un ID personalizzato/classe, ad esempio:

<div data-role="collapsible" data-content-theme="e" id="collapsePlace"> 
    <h3 id='h3Text'>Place:</h3> 
    <!--things...--> 
</div> 

in questo modo è solo bisogno di fare:

$('#collapsePlace #h3Text').text('new text'); 
+0

Non so se ha funzionato per la versione precedente di JQM ma non funziona per 1.2.0 –

+0

come si può vedere in questo violino, lo stile viene rimosso anche se il testo cambia. http://jsfiddle.net/AQZQs/ –

+0

ha funzionato per me con 1.2 – akiva

2

Una soluzione semplice sarebbe

$('#collapsePlace .ui-btn-text').text("hello "); 

Partenza il violino a http://jsfiddle.net/AQZQs/1/

+1

Ciò rimuoverà l'HTML dall'elemento '.ui-btn-text' mostrato nell'HTML della domanda. – Jasper

+0

per versioni successive di jQuery mobile (testato con v 1.4.3), sostituire ".ui-btn-text" con ".ui-collapsible-heading-toggle" –

4

In 1.3.2, il seguente sembra funzionare:

<div id="MyID" data-role="collapsible" >  
    <h3><span id="MyHeaderID">My Header</span></h3>  
    <!-- My Content --> 
</div> 

JQuery:

$("#MyID h3 #MyHeaderID").text("Your New Header"); 

Happy Coding!

+0

Cercavo questo. Grande! – user3023313

Problemi correlati