свернуть набор полей, когда элемент легенды clicked

У меня есть функция jQuery, которая переключает видимость содержимого набора полей при щелчке по его легенде, оставляя только границу набора полей (если она есть) и легенду, показывающую:

$('legend.togvis').click(function() {
    $(this).siblings().toggle();
    return false;
});

Она отлично работает, если набор полей не содержит текст узлы.

<fieldset><legend class='togvis'>Click Me</legend>
  <p>I toggle when the legend is clicked.</p>
  But I'm a recalcitrant text node and refuse to toggle.
</fieldset>

Чтобы переключить и текстовые узлы, я попробовал следующее:

$('legend.togvis').click(function() {
    $(this).parent().contents().not('legend').toggle();
    return false;
});

, который работает так же, как и первая функция. И это:

$('legend.togvis').click(function() {
    $(this).parent().contents(":not(legend)").toggle();
    return false;
});

, которое вызывает ошибку

Message: 'style.display' is null or not an object
Line: 5557
Char: 3
Code: 0
URI: http://code.jquery.com/jquery-1.4.4.js

Есть какие-нибудь мысли о том, как заставить все содержимое набора полей (без легенды) переключаться при щелчке по легенде?

Решение ETA, с большой благодарностью Eibx

$('legend.togvis').click(function() { 
    $(this).parent().contents().filter(
        function() {  return this.nodeType == 3; }).wrap('<span></span>');//wrap any stray text nodes
    $(this).siblings().toggle(); 
}); 
12
задан dnagirl 11 January 2011 в 15:25
поделиться