2014-02-26 158 views
0

我有一个textarea用户可以在其中编辑一些文本,他们被允许使用html(我知道所有的用户和信任他们)然后,该textarea的内容得到保存在数据库中。并在它打印元素后。用另一个标签替换html标签,然后删除其他标签

如何更换所有标题<h1><h2><h3>等。与<b>标签,然后删除自<b>是不同的,<p>

用户输入被存储在一个变量这样所有标签:

column_content = $('.dialog_editor').val(); 
+1

应该发生在那些标签里面的内容 –

+0

使用字符串替换 – shyamnathan

回答

2

这应该让你开始:

var column_content = 
    '<h1>Test 1</h1>\n' + 
    '<p>Lorem Ipsum</p>\n' + 
    '<h2>Test 2</h2>\n' + 
    '<input type="button" onclick="alert(&quot;missed me&quot;)" value="Click">\n' + 
    '<a href="javascript://">keep this</a>\n' + 
    '<h3>Test 3</h3>\n' + 
    'unwrapped text'; 

var $temp = $("<div></div>").html(column_content); 

$temp.find("h1, h2, h3").each(function() { 
    $(this).wrapInner("<b></b>").children().insertAfter(this); 
}); 
$temp.find(":not(b, p)").each(function() { 
    $(this).contents().insertAfter(this); 
    $(this).remove(); 
}); 
console.log($temp.html()); 
/* 
<b>Test 1</b> 
<p>Lorem Ipsum</p> 
<b>Test 2</b> 

keep this 
<b>Test 3</b> 
unwrapped text 
*/ 
+0

什么其它的标签是什么? –

+0

我认为除了'b'和'p'之外的所有其他标签都将被删除。 –

+0

不错的解决方案,但我可以看到我没有足够清晰,我不希望其他标签的内容像这个标签中的标签一样被删除,我只是希望它是没有任何标签的printet :) – Legarndary

4

尝试

$('.dialog_editor').change(function() { 
    var column_content = $('.dialog_editor').val(); 

    var $temp = $('<div />',{html: column_content}); 

    //process headers 
    $temp.find(':header').wrapInner('<b />').contents().unwrap(); 

    $temp.find('*:not(p, b)').contents().unwrap(); 

    $('#html').html($temp.html()); 
    $('#text').text($temp.html()); 
}); 

演示:Fiddle

+0

好的配偶,我确定很多人会使用这个,就像萨尔曼斯曼一样,个人更好一点,但是谢谢你的时间:) – Legarndary