Удаление тега из DOM
Ребята, подскажите как удалить все теги, например <strong> и </strong> в нужном мне DOM?
|
|
Как-то наподобие этого.
<h1>Продажа яваскрипта оптом.</h1>
<p>Наша компания занимает оптовыми <strong>поставками яваскрипта</strong> в отдаленные горные аулы.</p>
<p>Наш <strong>яваскрипт</strong> — самый <strong>качественный яваскрипт</strong> на рынке <strong>яваскрипта</strong>!</p>
<script>
var strongs = document.getElementsByTagName("strong"); /* находим все стронги */
for (var i=strongs.length - 1; i>=0; i--){ /* для каждого из них, начиная с конца */
var strong = strongs[i];
var acceptor = strong.parentNode;
while(strong.childNodes.length){ /* пока дочерние элементы не кончатся */
var child = strong.childNodes[0]; /* первый дочерний элемент */
strong.removeChild(child); /* выдергиваем */
acceptor.insertBefore(child, strong); /* и вставляем прямо перед стронгом */
};
acceptor.removeChild(strong); /* а потом прибиваем стронг */
};
</script>
|
Если с помощью jQuery (раз уж топик находится тут), то можно так:
$('strong').each(function() {
$(this).replaceWith(document.createTextNode($(this).html()));
});
|
Цитата:
$('strong').each(function(){
$(this).children().first().unwrap();
});
|
Согласен, так лучше, тем более что чистый jQuery. А я unwrap как-то упустил из виду. Наверное потому, что пользоваться не приходилось.
|
Тьфу! Так это ветка jQuery. :-?
|
Цитата:
Цитата:
|
Спасибо!
$('strong').each(function(){
$(this).children().first().unwrap();
});
А вот эта конструкция не работает. |
Кстати, вопросик почти по теме: если текст большой, тегов много и разных, не будет ли быстрее взять innerHTML и его просеять регэкспом?
|
RegExp тоже медленно работает когда много текста, это раз. Во вторых мы заменим текст полностью. У объектов потеряются все мануально установленные свойста, в некоторых браузерах и события. Ещё и фрэйма перезагрузятся) это так, на вскидку вспомнил.
Не выход короче. |
Эх похоже, придётся таки тестировать самому.) События и прочее - не волнует, просто парсится 1+мб форматированного текста на предмет ненужных тегов.
У меня сейчас есть вариант через innerHTML, работает в приципе достаточно быстро.(куда дольше грузится сам текст=) ). Просто на первый взгляд, в случае когда единожды берётся innerHTML прогоняется через реплейс и вставляется, скрипт должен работать быстрее чем через кучу операций с DOM для каждого конкретного тега. Плюс могут вылезти заморочки с вложенностью, как подумаю об этом... =) |
А вы не думайте :yes:
Для каждой задачи свои решения, кстати IE возвращает не правильный innerHTML ... |
Цитата:
|
Теги в верхнем регистре и атрибуты без кавычек. С точки зрения грамотности это не очень правильно.
|
Цитата:
|
Не надо сейчас вредничать :) Разве вы пишите такой html? С точки зрения html он может и правильный, а с точки зрения современного написания кода нет.
|
Что такое современное написание кода? Есть стандарты, даже как минимум два: HTML и XHTML. В XHTML innerHTML вообще нет, остаётся один. По стандарту HTML всё нормально. Firefox, кстати, как минимум удаляет / у одиночных тегов, у оперы теги тоже в верхнем регистре.
Отдавать из innerHTML то, что было получено с сервера, браузеры тоже не могут, хотя бы потому, что на выходе должен быть правильный HTML, а на входе может быть и неправильный. Но это не единственная причина. Вобщем просто не надо парсить innerHTML регулярками, и обвинять браузеры тоже не надо, они каждый по своему его отдают. |
Цитата:
|
Кстати, рискну, Вам нужно именно удалять эти теги, или достаточно сделать их незаметными?
<style type="text/css">
strong {font: inherit}
</style>
<h1>Продажа яваскрипта оптом.</h1>
<p>Наша компания занимает оптовыми <strong>поставками яваскрипта</strong> в отдаленные горные аулы.</p>
<p>Наш <strong>яваскрипт</strong> — самый <strong>качественный яваскрипт</strong> на рынке <strong>яваскрипта</strong>!</p>
(Ох уж, это тёмно-серое СЕО!..) |
| Часовой пояс GMT +3, время: 22:17. |