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

¿Cómo puedo cambiar dinámicamente el texto del encabezado <h3> ('Lugar:') en el div plegable?Jquery Mobile: ¿cambia dinámicamente el texto del encabezado de un div plegable?

me trataron:

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

y cambia el texto - pero pierde todo el estilo!

+0

Hice una pregunta similar y creo que la respuesta que me proporcionaron es mejor: http://stackoverflow.com/questions/38978102/jquery-mobile-change-the-header-of-a-listview/38980002 # 38980002 – ModusPwnens

Respuesta

5

La estructura HTML real de un plegable en jQuery Mobile 1.0rc2 es la siguiente (después de que el marco ha hecho su pase en el 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> 

El <span> elemento anidado dentro del elemento <span class="ui-btn-text"> hace que este un poco complicado. Si desea conservar la estructura del elemento <span class="ui-btn-text"> tendrá que guardar el <span> elemento anidado, sobrescribir y, a continuación, reemplazarlo:

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

Aquí es una jsFiddle de la solución anterior: http://jsfiddle.net/jasper/4DAfn/2/

+0

funciona perfectamente, muchas gracias! – Matthieu

0

una opción fácil es dar al h3 un encargo Identificación/clase, por ejemplo:

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

de esa manera usted sólo tendrá que hacer:

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

No sé si funcionó para la versión anterior de JQM pero no funciona para 1.2.0 –

+0

como puede ver en este violín, el estilo se está eliminando aunque el texto cambie. http://jsfiddle.net/AQZQs/ –

+0

funcionó para mí con 1.2 – akiva

2

Una solución sencilla sería

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

Salida el violín en http://jsfiddle.net/AQZQs/1/

+1

Eso eliminará el HTML del elemento '.ui-btn-text' que se muestra en el HTML de la pregunta. – Jasper

+0

para versiones posteriores de jQuery móvil (probado con v 1.4.3), reemplace ".ui-btn-text" con ".ui-plegable-heading-toggle" –

4

En 1.3.2, lo siguiente parece funcionar:

<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

Estaba buscando esto. ¡Estupendo! – user3023313

Cuestiones relacionadas