jquery - объединяет сложенные элементы DOM
У меня есть HTML, который был отформатирован через contenteditable div. Я хочу сделать это более кратким, современным HTML. Я могу легко заменить любые теги b, strong, em, font и т.д. и заменить их на span, но в результате получаются "сложенные" элементы.
Например, я мог бы иметь:
<span style="font-weight:bold">
<span style="text-decoration:underline">some text</span>
</span>
И я хочу увидеть:
<span style="font-weight:bold; text-decoration:underline">some text</span>
Трудная часть состоит в том, что это должно было бы обработать:
<span style="font-weight:bold">
<span style="text-decoration:underline">some text</span> not underlined
</span>
Я довольно долго искал и думал об этом, но не нашел ничего разумного.
1 ответ
Решение
Ну, вот и начало. Очевидно, ваш селектор будет более конкретным, чем просто span
,
$("span").each(function(){
var $this = $(this);
var $contents = $(this).contents();
if($contents.length === 1 && $contents.is("span")){
// only one child (including text nodes) and it is a span, combine
copyStylesFromParentToChild(); // need to implement this
$this.replaceWith($this.children()); // replace the parent with the child
}
});
Единственная сложная часть здесь copyStylesFromParentToChild
, Я не знаю простого и простого способа скопировать все стили из одного элемента в другой. Вы можете попробовать JavaScript и стиль копирования