2011-12-20 4 views
2

У меня есть структура;Изменить содержимое div, когда div содержит div

<p class = "foo">"sometext"</p> 
<div class = "foo"> 
    <p class = "moo">"sometext"</p> 
    <div class = "moo"> 
     <p class = "boo">"sometext"</p> 
     <div class = "boo"> 
     </div> 
    </div> 
</div> 

И из этой структуры я создаю меню, когда я нажимаю на абзац, который отобразит соответствующий div.

$("p").click(function() 
     { 
      $(this).next("div").toggle(); 
        #Code that adds a minus sign before the paragraph eg. "+Mylink to "-Mylink" 
     }); 

I im теперь пытается получить знак «+», если меню не нажато, и «-», если нет. Проблема, с которой я сталкиваюсь, - это способ узнать, как пропустить последний шаг (класс boo), он не нуждается в дополнительном знаке (это не меню). Любой простой способ пройти через структуру и добавить знак плюса? Есть ли простой способ получить функцию щелчка, чтобы узнать ее расширенный/расширенный?

+0

'

' неправильный, возможно, атрибут 'class' отсутствует? –

+0

Просто опечатка, спасибо за уведомление :) – Tim

ответ

1

Вы можете использовать селектор :has() для проверки братьев и сестер:

$('div:not(:has(*))').each(function() { 
    $(this).prepend('-'); 
}); 

Это должно работать:

$('p').prepend('<span class="toggle">-</span>'); 

$("p").click(function() { 
    var sign = $(this).siblings('.toggle'); 

    $(this).next("div").toggle(); 

    if (sign.text() == '+') { 
    sign.text('-'); 
    } else { 
    sign.text('+'); 
    } 
}); 
+1

Или просто 'div: not (: has (div))' – Amadan

+0

@Amadan: Мне нужно изучить эти псевдоселектора. Благодаря! – Blender

+0

Спасибо за ответ. как изменить содержимое на p в функции щелчка. Я предполагаю, что это что-то в строке с $ (this) .text (this); но я не понимаю, как это работает. – Tim

0

Учитывая ваш HTML проще всего сделать, это изменить первый селектор

$("p:not(.boo)").click(function() { 
    // .... 
}) 
Смежные вопросы