2012-01-20 4 views
3

У меня есть виджет rss, который генерирует эти странные div, которые влияют на расположение сообщения в блоге. Эти divs окружают и изображение, и только один абзац текста подталкивает другие абзацы, которые должны обертывать изображение вниз, создавая действительно неудобные блоки пространства.Как заменить или удалить обертку div из разметки с помощью javascript или jquery и сохранить динамическое содержимое на своем месте?

Вот пример существующей разметки:

<div class="separator" style="clear: both; text-align: left;"> 
<a style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" imageanchor="1" href="#" target="_blank"> 
<img width="320" height="214" border="0" src="http://3.bp.blogspot.com/-TIpzIZpEY50/TwEruI4XDlI/AAAAAAAAAXg/gIv3vafB3Sc/s320/December+2011+130.JPG"> 
</a> 
and here is a bunch of text 
</div> 

То, что я хочу сделать, это удалить оберточной Div класса разделитель и заменить содержимое внутри. Каждый экземпляр этого div имеет различный контент.

Так что я пытался использовать следующий JQuery скрипт, но он не работает, потому что содержание не обернуто в дочерних дивах, так что здесь я застреваю:

<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 

$("div.separator").replaceWith(function() { 
return $(this).contents(); 

}); 

Спасибо за вашу помощь !

+1

JQuery разворачивать - http://api.jquery.com/unwrap/ – mrtsherman

+0

Что не работает? Этот фрагмент, похоже, делает именно то, что вы считаете нужным. –

ответ

1
$("div.separator").children().unwrap(); 
+0

the.unwrap работал хорошо! Благодаря! И чтобы ответить на ваш вопрос Alex, исходный фрагмент, который я использовал, кажется, работает только в том случае, если содержимое по какой-то причине завернуто в дочерний div, это ошибка, которая упоминается на странице документа jquery для replaceWith(); Еще раз спасибо за потрясающее решение! – lilWebbie

+0

@ user894004 - Я бы использовал 'children (': first')' или это будет выполняться для всех детей. – mrtsherman

1
$('div.seperator').each(function() { 
    $(this).replaceWith($(this).children()); 
}); 
+0

вы потеряете любые события, связанные с элементами в разделителе. попробуйте '$ (this) .children()' вместо '$ (this) .html()'. Во всяком случае, '.unwrap' предназначен для этой функции. –

+0

@ KevinB не знал о разворачивании, довольно круто, и я обновил мой, чтобы использовать детей, спасибо, хороший улов !! –

0

Если вы просто хотите, чтобы удалить их использовать $('div.separator').remove();.

Чтобы повторно использовать дивы, используйте либо

$('div.separator').empty().html('<p>your custom html here</p>');

или

$('div.separator').empty().append(yourExistingDOMElement);

в зависимости от того, что вы заменяете его.

решать их все, он становится:

$('div.separator').each(function() { 
    $(this).empty().html(string); //or the append version. 
}); 

Надеется, что это помогает,

Пит