如何使用jQuery移除所有样式,仅保留字体加粗属性?

3

我正在使用 NicEdit 作为我的应用程序编辑器,我们网站的用户通常需要从 MS Word 或其他来源中粘贴数据,因此界面会破裂,所以我们决定使用 jQuery 从HTML中删除所有格式。

我做的是删除所有内联样式和类,但它正在创建问题,因为它也将粗体和斜体删除了,而我们希望保留这些。

是否有任何简单的方法使用jQuery删除除粗体之外的所有样式。

例子:

<div style="color:red; font-size:13px; font-weight:bold;">test div </div>

在上述元素中,我希望它变成这样。
<div style="font-weight:bold;">test div </div>

你有尝试过任何东西吗?请查看此问题的答案 - naththedeveloper
“它也删除了粗体和斜体,而我们想要保留”这个陈述与问题的其他部分相冲突:您只想保留加粗,还是同时保留加粗和斜体? - Jukka K. Korpela
我想保留加粗和斜体。 - rajansoft1
你能否在http://jsfiddle.net/上调试你的问题? - Nik Kashi
你应该编辑问题以反映预期的含义。问题应该能够独立理解,而不需要阅读评论。 - Jukka K. Korpela
您还应该澄清“所有格式”是什么意思。例如,链接是否应该被删除,因为它们默认会影响格式,或者标题元素、列表或通常具有一些默认格式的HTML元素呢? - Jukka K. Korpela
4个回答

1

我还没有测试过它,尝试看看是否能正常工作。

 $('div').each(function(){
   weight = $(this).css('font-weight');
   $(this).attr('style','');
   $(this).removeClass();
   $(this).css('font-weight',  weight);
});

0

我认为唯一的方法是存储您想要的样式,将它们全部删除,然后重新设置。

$('.selector').each(function() {
  var keepStyle, $el;
  $el = $(this);
  keepStyle = {
    font-weight: $el.css('font-weight'),
    font-style : $el.css('font-style')
  };

  $el.removeAttr('style')
    .css(keepStyle);
})

代码无法运行;属性名font-weightfont-style必须加引号。此代码仅影响与.selector匹配的元素,而不是任何后代元素;这应该得到澄清。此外,这并不能删除所有格式,例如<u>...</u><font color=red>red</font>所创建的格式。 - Jukka K. Korpela

0
var $temp = $('<div><div style="color:red; font-size:13px; font-weight:bold;">test div </div></div>');

 $temp.find('*').each(function(){
    var fontWeight = $(this).css('font-weight');
$(this).removeAttr('style');
if(fontWeight!=undefined){
     $(this).attr('style','font-weight:'+fontWeight);
}
});

0

你可以使用jquery data方法将这些属性存储为数据, 在清除所有样式后恢复。


我没有那个选项,因为用户将一些数据粘贴到编辑器中,我们正在将该数据保存到数据库中,在网站上,我们必须从元素中删除格式。 - rajansoft1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接