問題はあなたの使い方です.closest()
。機能する方法.closest()
は、(this) 要素から扇状に広がって、最も近い親/子を見つけることです。コードには、 の直接の親/子である span 要素がない<li>
ため、 undefined が返されます。
jqueryセレクターを使用して簡単に言えば、取得したいスパンはliから次のようにネストされます。
var count = $(this).parent().parent().children('h3').children('span').text();
ただし、これらすべてのセレクターを実際に使用するわけではないため、次のようにすることができます。
var count = $(this).closest('div').find('span.ui-li-count').text();
h3
は と同じレベルにあるため、ul
最初にコンテナを取得する必要があります。この例ではdiv
です。次に、find を使用して、その div 内のスパンを見つけます。
.text()
また、以前はコンテンツを取得していたことにも注意してください。これは、javascripts に代わる jQuery.textContent
です。
コードで動作することを確認できるように、簡単なテストケースを作成しました。
http://jsbin.com/odamac/3/edit
うまくいけば、これはあなたを正しい方向に向けるでしょう:)
アップデート
もう 1 つ遭遇する問題は、あなたの DOM があなたが思っているように正確にレイアウトされていないということです。jQuery Mobile は、ウィンドウが読み込まれるときに追加の要素をページに挿入して、その機能を実装できるようにします。
実際のページ DOM は次のようになります。
<div data-role="page">
<div data-role="collapsible" class="ui-collapsible">
<h3 class="ui-collapsible-heading">
<a href="#" class="ui-collapsible-heading-toggle ui-btn">
<span class="ui-btn-inner">
<span class="ui-btn-text">
Community Alerts
<span id="comm_count" class="ui-li-count" style="float:right;">5</span>
<span class="ui-collapsible-heading-status"> click to expand contents</span>
</span>
<span class="ui-icon"> </span>
</span>
</a>
</h3>
<div class="ui-collapsible-content">
<ul id="communityAlertList" data-role="listview" class="ui-listview">
<li data-theme="b" id="1" class="ui-li">1</li>
<li data-theme="b" id="2" class="ui-li">2</li>
<li data-theme="b" id="3" class="ui-li">3</li>
<li data-theme="b" id="4" class="ui-li">4</li>
<li data-theme="b" id="5" class="ui-li">5</li>
</ul>
</div>
</div>
</div>
折りたたみ可能な機能を機能させるために、jQuery Mobile が挿入した余分な要素と要素に注意してください。closest();
、find();
、parent();
、children();
などを使用して DOM をトラバースするときは、これらの要素を考慮する必要があります。