Изменение текста при нажатии для переключения элементов - PullRequest
0 голосов
/ 21 февраля 2011

Я пытаюсь изменить '+' на '-' при переключении элементов. Я попробовал несколько вещей, но как только символ изменится, он не будет переключаться вперед и назад, как это должно быть. Я искал другие сообщения, но они не работают для моего кода.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
//Hide (Collapse) the toggle containers on load
$("trace_dump").hide();

//Slide up and down on hover
$("h3").click(function(){
    $(this).next("trace_dump").slideToggle("slow");
    $(this).text($('span').text() == '+' ? '-' : '+');
});
});
</script>

... и вот HTML:

<h3><span>+</span>print_r()</h3>
<trace_dump>
    print_r($e);
</trace_dump>
<h3><span>+</span>var_dump()</h3>
<trace_dump>
    var_dump($e);
</trace_dump>

Могу ли я получить некоторые идеи?

Ответы [ 5 ]

1 голос
/ 21 февраля 2011

В этой строке:

    $(this).text($('span').text() == '+' ? '-' : '+');

this ссылается на h3, а не на span, как я думаю, вы хотели.

Попробуйте это:

$(this).find('span').text($(this).find('span').text()=='+'?'-':'+');
1 голос
/ 21 февраля 2011

В своей встроенной условной проверке вы запрашиваете все элементы <span> и сравниваете содержимое .text().Это явно не сработает.Используйте $(this).find('span') или даже лучше, сделайте это так:

$(this).find('span').text(function(i, text) {
    return text === '+' ? '-' : '+';
});

Демо : http://jsfiddle.net/qR2NU/8/

0 голосов
/ 21 февраля 2011

Это тоже будет работать. Если вы зададите контекст в качестве второго параметра, то поиск будет ограничен внутренним элементом. В этом случае его "h3"

 var element = $('span',$(this));
    element.text(element.text() == '+' ? '-':'+');
0 голосов
/ 21 февраля 2011

Я думаю, что после первого вызова вашей функции элемент span заменяется на + или - И поэтому со следующего вызова jquery вообще не находит элемент span

У меня нетпроверил это, но чтение кода заставляет меня поверить в это.

Может быть, полностью удалить диапазон и заменить на + или -

Надеюсь, это поможет

0 голосов
/ 21 февраля 2011

вам нужно заключить его в div , который поддерживает show / hide операции. нет тэга html trace_dump Это работает. Смотри демо здесь

UPDATE:

jQuery(document).ready(function() {             
$("trace_dump").hide();
//Slide up and down on hover
$("h3").click(function(){
    $(this).next("trace_dump").slideToggle("slow");
    $(this).find("span").html(($(this).find("span").text().trim() == '+' ? '-' : '+'));  
}); 

});
...