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 -->
Другие вопросы по тегам