jQuery HTMLコンテンツを追加および削除するためのトラバーサル

トグル矢印のHTMLコンテンツを追加および削除する際に、このスパンタグを取得するのに問題があります。

$('h3 + p').hide();

$('h3').click(
function() {
$(this).next().slideToggle('normal');
 });

if ($('p').css('display') == 'none') {
      $(this).closest("span").html('►');
 }
 else {
      $(this).closest("span").html('▼');
 } 


TITLE

this content will toggle

1

3 答え

ここであなたのコードを修正しました。これはあなたが望むものと思っています:

http://jsfiddle.net/qXSnC/1/

$('h3').click(function() {
    $(this).next().stop().slideToggle('normal').toggleClass("hidden");

    if (!$('p').hasClass('hidden')) {
          $(this).find("span").html('►');

     }
     else {
          $(this).find("span").html('▼');
     } 

 });
0
追加された
はい、closest()は、祖先の次の一致を見つけます。あなたの例ではspanは$(これ)の子であったので、それを見つけられませんでした。
追加された 著者 Vigrond,
Aww find()、ありがとう!
追加された 著者 cam,

ここに私が思いついた解決策があります:

$('h3 + p').hide();

$('h3').click(function() {
    var t = $(this),
        p = t.next();

    t.find('span').html(p.is(':visible') ? '►' : '▼');

    p.slideToggle('normal');
});

私はここの作業用のjsfiddleを作成しました。

0
追加された
if ($('p').is(":visible")) {
      $(this).closest("span").html('►');
 }
 else {
      $(this).closest("span").html('▼');
 } 
0
追加された
問題は、DOMをトラバースするために.closest( "span")を使用したときにうまく動作するif条件ではなく、スパンに到達するようには機能していません。
追加された 著者 cam,
なぜp:目に見えないの?
追加された 著者 Jazz Man,