У меня есть функция 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 Solution, большое спасибо 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();
});
.toggle()
работает, влияя на css узла, он не может влиять на текстовые узлы. Возможно, мне нужно сохранить содержимое набора полей в.data()
, а затем удалить дочерние элементы? - person dnagirl   schedule 11.01.2011