2016-08-16 90 views
0

我已经查看了所有的答案,我认为这会是一个比较简单的问题。我所看到的所有答案都表示使用'.text()'不起作用。jquery mobile:更改列表视图的标题

在jquery mobile中,我想简单地用列表视图中选择的单选按钮的文本替换列表视图中的标题文本。为了简单起见,只需动态更改列表视图中的标题文本就足够了。问题是我不能动态地改变列表视图的标题的文本,而不删除一些HTML。我试图从计算器提出了许多建议和其他网站,包括:

Jquery Mobile: Dynamically change the text of the header of a collapsible div?

https://forum.jquery.com/topic/how-can-i-dynamically-change-the-text-of-a-collapsible

jQuery mobile: Dynamically updating collapsible heading causes loss of styling

我使用以下的Android设备上测试:

  • 科尔多瓦版本:6.3.1
  • JQuery的1.11.0
  • jQuery Mobile的1.4.5

HTML:

<div data-role="page" id="test"> 

<div role="main" class="ui-content"> 
    <div class="ui-grid-a multiple-inputs"> 
     <div class="ui-block-a"> 
      <ul data-role="listview" data-inset="true" data-shadow="false"> 
       <li data-role="collapsible" data-iconpos="right" data-inset="false"> 
        <h2 id="h2-test-area">Area</h2> 
        <form> 
         <fieldset data-role="controlgroup"> 
          <input type="radio" name="rad-test-area" id="rad-test-area-0-1" value="0"> 
          <label for="rad-test-area-0-1">Abdomen</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-1-1" value="1"> 
          <label for="rad-test-area-1-1">Arms</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-2-1" value="2"> 
          <label for="rad-test-area-2-1">Outer thigh</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-3-1" value="3"> 
          <label for="rad-test-area-3-1">Inner thigh</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-4-1" value="4"> 
          <label for="rad-test-area-4-1">Calves</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-5-1" value="5"> 
          <label for="rad-test-area-5-1">Flanks</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-6-1" value="6"> 
          <label for="rad-test-area-6-1">Chest</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-7-1" value="7"> 
          <label for="rad-test-area-7-1">Buttocks</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-8-1" value="8"> 
          <label for="rad-test-area-8-1">Back (lower and upper)</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-9-1" value="9"> 
          <label for="rad-test-area-9-1">Jaw line</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-10-1" value="10"> 
          <label for="rad-test-area-10-1">Chin</label> 
          <input type="radio" name="rad-test-area" id="rad-test-area-11-1" value="11"> 
          <label for="rad-test-area-11-1">Knee</label> 
         </fieldset> 
        </form> 
       </li> 
      </ul> 
     </div> 
     <div class="ui-block-b"> 
      <ul data-role="listview" data-inset="true" data-shadow="false"> 
       <li data-role="collapsible" data-iconpos="right" data-inset="false"> 
        <h2>Relevant treatments:</h2> 
        <form> 
         <fieldset data-role="controlgroup"> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-1"> 
          <label for="cb-test-1-1">Fillers</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-2"> 
          <label for="cb-test-1-2">Botox</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-3"> 
          <label for="cb-test-1-3">Dermaroller</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-4"> 
          <label for="cb-test-1-4">HydraFacial</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-5"> 
          <label for="cb-test-1-5">FSR</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-6"> 
          <label for="cb-test-1-6">Laser</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-7"> 
          <label for="cb-test-1-7">Ping</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-8"> 
          <label for="cb-test-1-8">Endymed</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-9"> 
          <label for="cb-test-1-9">Chemical Peel</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-10"> 
          <label for="cb-test-1-10">Aqualyx</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-11"> 
          <label for="cb-test-1-11">Hyalase</label> 
          <input type="checkbox" name="cb-test-1" id="cb-test-1-12"> 
          <label for="cb-test-1-12">Tretinion and Hydroquinone (Obagi)</label> 
         </fieldset> 
        </form> 
       </li> 
      </ul> 
     </div> 
    </div><!-- /grid-a --> 

</div><!-- /content --> 

</div><!-- /test page --> 

这是HTML什么,我试图操纵的样子呈现前:

<h2 id="h2-test-area">Area</h2> 

文本“区域”是我想要改变的。

这是HTML什么,我试图操纵看起来像渲染后:

<h2 id="h2-test-area" class="ui-collapsible-heading"> 
    <a href="#" class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-right ui-btn-inherit ui-icon-minus"> 
     Area 
     <span class="ui-collapsible-heading-status"> click to collapse contents</span> 
     ::after 
    </a> 
</h2> 

的Javascript:

$("input[name='rad-test-area']").on("change", function() { 
    $("#h2-test-area a.ui-collapsible-heading-toggle").text("new text"); 
}); 

当我执行上述的javascript它取代了文字我想它,但它也会替换HTML中文本“区域”之后出现的范围。为什么每个人都说'.text()'在清除HTML时会起作用?预先感谢您的任何帮助。

回答

1

你可以让你的生活更轻松,文字周围用一个SPAN元素被改变:

<h2 id="h2-test-area"><span id="h2-test-area-span">Area</span></h2> 

然后你就可以轻松地使用的.text()上跨度:

$("input[name='rad-test-area']").on("change", function() { 
    $("#h2-test-area-span").text("new text"); 
}); 

DEMO

+0

谢谢,这很容易,我做到了。我想我只是认为,jQuery的手机应该有一个更简单的方式来操纵ListView标题。 – ModusPwnens

1

尝试使用html替换而不是文本来保留html内容。

$("input[name='rad-test-area']").on("change", function() { 
    $("#h2-test-area a.ui-collapsible-heading-toggle").html().replace("Area", "new text"); 
}); 
+0

你几乎差点把我带到那里,我不得不做下面的事情()“变化”,函数(){ var areaTxtElem = $(“#h2-test-area a.ui-可折叠标题拨动“)。HTML()。替换(“区域”,“新文本”); $(“#h2-test-area a.ui-collapsible-heading-toggle”)。html(areaTxtElem); })' 但是,如果我再次更改无线电的值,我将不得不使用更多的代码来知道要替换的代码。感谢你的付出。 – ModusPwnens