我使用此脚本用span标记替换嵌套字体标记:
$(document).ready(function(e) {
var content = $('div').first();
$('#input font').each(function(index, value){
var span = document.createElement('span');
span.style.color = $(this).attr('color');
span.innerHTML = $(this).html();
$(content).children('font').first().replaceWith(span);
});
$('#output').html($(content).html());
});
这是带有我要替换的字体标签的html
<div id="input">
At vero eos et accusam et justo duo dolores et ea rebum. <font color="#00FF99"><font color="#ff0000">Stet clita</font> kasd gubergren</font>, no sea takimata sanctus est Lorem ipsum dolor sit amet.
</div>
<div id="output"></div>
我的脚本不会替换内部字体标记(<font color="#ff0000">Stet clita</font>
)。知道为什么吗?
提前致谢
答案 0 :(得分:1)
您可以使用replaceWith
方法。
$('#input font').each(function(){
var $this = $(this);
var $span = $('<span/>', {
text: $this.text(),
style: "color:" + $this.css('color')
})
$this.replaceWith($span)
});
答案 1 :(得分:0)
我猜想外部font
标记首先被新span
替换。该操作实际上从DOM中删除了初始内部font
元素,因此each()
的第二次迭代将失败。替换的新font
不受原始each()
调用的约束,因此不会对其执行任何操作。
答案 2 :(得分:0)
尝试将换行更改为:
span.innerHTML = $(this).text();
而不是
span.innerHTML = $(this).html();
如果您确定<font>
标记内只有文字
答案 3 :(得分:0)
尝试这种深度优先的方法:
function replace(el) {
if (el.length == 0) return;
replace($(el).children('font'));
if ($(el).is('font')) {
var span = document.createElement('span');
span.style.color = $(el).attr('color');
span.innerHTML = $(el).html();
$(el).replaceWith(span);
}
}
$(function(e) {
var content = $('div').first();
replace(content);
});
答案 4 :(得分:0)
略有不同的方法:working demo
请注意,与您的版本不同,更改仅在#output
中进行,而不是在#input
中进行;我怀疑这是你的意图,基于名称(因此使用.clone()
)。
$(document).ready(function(e) {
var content = $('div').first().clone();
var fnt = content.find('font');
while( fnt.length > 0 ) {
var current = fnt.first();
var span = $('<span />')
.css('color', current.attr('color') )
.html( current.html() );
current.replaceWith(span);
}
$('#output').html( $(content).html() );
});