我正在开发一个文本编辑器,其中内容可以采用以下形式:
<div>some text <strong>bold text</strong> more <em>italic</em></div>
现在,在某些用户点击时,我必须从div中删除加粗和斜体样式。
如何从div中删除strong和em标签?
谢谢
Kapil
我正在开发一个文本编辑器,其中内容可以采用以下形式:
<div>some text <strong>bold text</strong> more <em>italic</em></div>
现在,在某些用户点击时,我必须从div中删除加粗和斜体样式。
如何从div中删除strong和em标签?
谢谢
Kapil
HTML
<div id="foo">
<div>some text <strong>bold text</strong> more <em>italic</em></div>
</div>
JS
var t = document.getElementById('foo').innerHTML;
t = t.replace('<strong>', '');
t = t.replace('</strong>', '');
t = t.replace('<em>', '');
t = t.replace('</em>', '');
document.getElementById('foo').innerHTML = t;
我不确定您是否需要jQuery,但它可以很好地处理这样的事情:
// To remove styles from clicked element.
$('#editor *').click(function () {
$(this).replaceWith($(this).text());
});
$(this)
转换为 $('strong,em', this)
。 - ninjageckovar element = document.getElementById('whatever');
element.innerHTML = element.innerHTML.replace(/<(strong|em)>(.*?)<\/\1>/g, '$1');
请注意,与此
不要使用正则表达式或其他文本替换方法。DOM是一棵树,应该像对待树一样处理它,不要害怕它。这是处理此类事情最安全、最温和的方式。
function removeElements(container) {
var elements = container.getElementsByTagName("*");
// Make an array of the strongs and ems
var strongsAndEms = [];
for (var i = 0, len = elements.length; i < len; ++i) {
if (/^(strong|em)$/i.test(elements[i].tagName)) {
strongsAndEms.push(elements[i]);
}
}
// Remove the strongs and ems
for (var j = 0, el, child; el = strongsAndEms[j++]; ) {
while ( (child = el.firstChild) ) {
el.parentNode.insertBefore(child, el);
}
el.parentNode.removeChild(el);
}
}
var div = document.getElementById("foo");
removeElements(div);