replaceWith не удаляет комментарии
Я пытаюсь заменить кусок HTML с помощью jquery replaceWidth()
<!-- content box -->
<div id="content-box">
yo
</div>
<!-- /content box -->
Как это:
$('#content-box').replaceWith(response.box);
Но тогда я получаю
<!-- content box -->
<!-- content box -->
<div id="content-box">
yo
</div>
<!-- /content box -->
<!-- /content box -->
Есть ли способ заставить его заменить комментарии HTML тоже?:П
2 ответа
Решение
Это потому, что комментарии снаружи #content-box
дела.
<!-- content box : will not be replaced -->
<div id="content-box">
<!-- This comment will be replaced -->
yo
</div>
<!-- /content box : will not be replaced -->
Комментарии не являются частью контент-бокса. Они полностью независимые братья и сестры. Не дети. Я думаю, что лучший способ - это удалить комментарии от своего родителя.
$('#content-box').parent().html('').append(response.box);
Если вы не хотите очищать родительский HTML, вы можете удалить все комментарии из родительского кода, используя следующий код:
$('#content-box').parent().contents().each(function() {
if(this.nodeType == 8) {
$(this).remove()
}
});
Если вы хотите избавиться от комментариев только в пределах response.box
(как я понял), вы можете использовать это:
$('#content-box').replaceWith(function(){
return response.box.replace(/<!--(.*?)-->/ig, '');
});
Функция выше изменит это:
<!-- content box -->
<div id="content-box">
yo
</div>
<!-- /content box -->
в это (отдельные комментарии):
<!-- content box -->
<div id="content-box">
text from response.box
</div>
<!-- /content box -->