如何在不使用regexp的情况下从JavaScript中删除字符串中的HTML标记?

时间:2016-03-17 02:09:34

标签: javascript

我是编程新手,我正在解决这个问题。 我尝试过使用string.slice()的3个循环,但由于某种原因,它会打印一个空字符串。

请您解释我的代码中发生了什么,以及为什么它会输出错误的输出以及我如何纠正,而不是给我你正确答案的版本,以便我可以从错误中吸取教训。

测试输入

<p><strong><em>PHP Exercises</em></strong></p>

和输出应该是PHP练习

p.s这不是PHP练习,我并不困惑

这是我的代码:

function remove(answer){ 

    var sen = answer.split("");
    var arr = [];
    for (var i = 0; i<answer.length; i++){
        if (answer[i] == "<"){
            for (var j = i; j<answer.length; j++){
                if (answer[j] == ">"){
                    for (var k = j; k<answer.length; k++){
                        if (answer[k] == "<"){
                            return answer.slice(j+1, k);                
                        }
                    }
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:5)

试试这个:

 InvalidSenderError: Unauthorized sender 

或者您可以使用string.js(string.js link):

function stripTags(data)
{
   var tmpElement = document.createElement("div");
   tmpElement.innerHTML = data;
   return tmpElement.textContent || tmpElement.innerText || "";
}

var something = '<p><strong><em>PHP Exercises</em></strong></p>';
alert(stripTags(something));
var S = window.S;
var something = '<p><strong><em>PHP Exercises</em></strong></p>';
something = S(something).stripTags().s;
alert(something);

如果您正在尝试nodejs:

<script src="https://raw.githubusercontent.com/jprichardson/string.js/master/dist/string.min.js"></script>

答案 1 :(得分:1)

至于为什么提供的代码不起作用,代码在j = 2和k = 3时返回。我通过编写console.log(j,k)发现了这一点。在返回之前。这种见解清楚地表明代码正在识别第一组开放标记,而实际上您似乎想要识别开放和封闭的“em”标记。其他人提供的答案更加强大,但对代码的快速修复是:

变化

if (answer[i] == "<"){

if (answer.slice(i, i+3) == "<em"){

希望这有帮助!

答案 2 :(得分:-2)

您的代码未考虑... 没有。它只是在“&gt;”之间的第一次遭遇时停止和“&lt;”,在第一种情况下,没什么!你应该检查一个角色是否存在,如果不存在则继续。

老实说,这是教科书用来试图让你在盒子外思考的无用练习之一。但是你永远不会想要循环一个字符串来查找标签之间的文本。 JavaScript内置了很多方法,它实际上重新发明了轮子......就好像轮子真的是一个for循环。

如果你真的想避免使用正则表达式和其他内置函数,以便你可以学习解决问题的方法,那么首先尝试用括号切片!