Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript/jquery迭代包含HTML的字符串中的所有标记_Javascript_Jquery_Html - Fatal编程技术网

使用javascript/jquery迭代包含HTML的字符串中的所有标记

使用javascript/jquery迭代包含HTML的字符串中的所有标记,javascript,jquery,html,Javascript,Jquery,Html,我使用的是一个富文本编辑器类型控件,它是作为jQuery插件编写的。它基本上是在页面上插入一个IFrame,并使其可编辑——这对于富文本控件来说是相当标准的 现在,我想做的是改进一个选项,它可以从文本编辑器中删除所有格式。目前,这项工作是用一大串正则表达式完成的,谷歌的快速搜索表明这不是正确的方法。我希望允许这种不格式化具有一定程度的灵活性,这样我就可以保留某些标记(如段落标记) 我试图使用jQuery内置的DOM解析来轻松地完成这项工作,但我似乎遇到了麻烦 假设我有一个示例HTML字符串: &

我使用的是一个富文本编辑器类型控件,它是作为jQuery插件编写的。它基本上是在页面上插入一个IFrame,并使其可编辑——这对于富文本控件来说是相当标准的

现在,我想做的是改进一个选项,它可以从文本编辑器中删除所有格式。目前,这项工作是用一大串正则表达式完成的,谷歌的快速搜索表明这不是正确的方法。我希望允许这种不格式化具有一定程度的灵活性,这样我就可以保留某些标记(如段落标记)

我试图使用jQuery内置的DOM解析来轻松地完成这项工作,但我似乎遇到了麻烦

假设我有一个示例HTML字符串:

<Body><p>One <strong>Two</strong> <em>Three</em></p></Body>
123

我希望取消它的格式,以便所有非段落标记都被删除。因此,我希望输出是如下所示的字符串:

<Body><p>One Two Three</p></Body>
一二三

示例代码:

//Some very simple HTML obtained from an editable iframe
var text = '<Body><p>One <strong>Two</strong> <em>Three</em></p></Body>';
var $text = $(text);

//All tags which are not paragraphs
$(':not(p)',$text).each(function() {
    //Replace the tag + content with just content
    $(this).html($(this).text());
});

//I'll be honest, I found this snippet somewhere else on stackoverflow,
//It seems to parse the jquery object back into an HTML string.
var returnVal = "";
$text.each(function(){
    returnVal += $(this).clone().wrap('<p>').parent().html();
});
//Should be equal to '<p>One Two Three</p>'       
return returnVal;
//从可编辑的iframe获取的一些非常简单的HTML
变量文本='123

'; var$text=$(text); //不是段落的所有标记 $(':not(p)'$text.each(function(){ //将标记+内容替换为内容 $(this.html($(this.text()); }); //老实说,我在stackoverflow的其他地方找到了这个片段, //它似乎将jquery对象解析回HTML字符串。 var returnVal=“”; $text.each(函数(){ returnVal+=$(this.clone().wrap(“”).parent().html(); }); //应该等于'1,2,3

' 返回值;
这似乎应该行得通,但不幸的是行不通。在上面的示例中,“returnVal”与输入相同(减去“body”标题标记)。这里有什么明显的错误吗?

替换这一行:

$(this).html($(this).text());
。。。为此:

$(this).replaceWith($(this).text());

。。。而且它应该是有效的(至少它是有效的)。

John,这是一个意大利面代码!你能给我们一个总结吗?什么是你想要的输入,什么是你想要的输出。真的有那么糟糕吗?我试图说清楚。等一下,让我编辑一下。将代码描述为意大利面条。。。这完全是错误的。它读起来非常好。您确实有一个bug,我将很快解决。当然,我更喜欢
解析
方式,10次中有9次,尽管我的正则表达式fu(通常,但并不总是)足够好,可以看到如何使用
Chtulhu
方式进行解析。)
$text.not('p')。not('em')
$(':not(p,em),$text)
$text.not('p,em')
应该都能用(尽管我不是100%使用我头脑中的“:not(p,em)”语法)。
...snip
// Here's your bug:
$(':not(p)',$text).each(function() {
//  You can't use .html() to replace the content 
//     $(this).html($(this).text());
//   You have to replace the entire element, not just its contents:
    $(this).replaceWith($(this).text());
});
...snip