用javascript解析文本:神秘生成的段落标记

用javascript解析文本:神秘生成的段落标记,javascript,text,Javascript,Text,当我解析js中的文本并希望从多行中检索DNA序列查询名称并将其放在段落标记之间时,它无法正常工作 文本文件的一部分: 守则: 我先把行读入数组 for(var i = 0; i < lines.length; i++){ var line = lines[i]; if(line.search("Query= ") != -1){ results.innerHTML += " <p class='result_n

当我解析js中的文本并希望从多行中检索DNA序列查询名称并将其放在段落标记之间时,它无法正常工作

文本文件的一部分:

守则: 我先把行读入数组

    for(var i = 0; i < lines.length; i++){
        var line = lines[i];

        if(line.search("Query= ") != -1){ 
            results.innerHTML += "    <p class='result_name'>    <br>Result name: ";
            //the name starts at 7th char
            results.innerHTML += line.slice(7);
            //take the next line
            i++;
            // tried to searh for "\n" or "\r" or "\r\n" to end cycle - didn't work
            // so instead I put this for the while condition:
            while(lines[i].length > 2 ){
                results.innerHTML += lines[i];
                i++;
            }
            //here is where I want the result_name paragraph to end.
            results.innerHTML += "    </p>    <p>Result(s):</p>";
        }
     }
结果是: 不要使用

innerHTML += 
先生成整个HTML,然后将其添加到innerHTML,我猜当您使用innerHTML时,浏览器会自动添加结束标记。

不要使用

innerHTML += 

先生成整个HTML,然后将其添加到innerHTML,我猜当您使用innerHTML时,浏览器会自动添加结束标记。

用部分HTML填充innerHTML将自动更正结束标记。因此,创建一个临时变量来收集字符串,并立即将其填入目标,如下所示。这就解决了问题

var temp = "";
for(var i = 0; i < lines.length; i++){
var line = lines[i];

    if(line.search("Query= ") != -1){ 
        temp += "    <p class='result_name'>    <br>Result name: ";
        //the name starts at 7th char
        temp += line.slice(7);
        //take the next line
        i++;
        // tried to searh for "\n" or "\r" or "\r\n" to end cycle - didn't work
        // so instead I put this for the while condition:
        while(lines[i].length > 2 ){
           temp += lines[i];
           i++;
        }
        //here is where I want the result_name paragraph to end.
        temp += "    </p>    <p>Result(s):</p>";
    }
}
results.innerHTML = temp;

用部分html填充innerHTML将使用end标记自动更正。因此,创建一个临时变量来收集字符串,并立即将其填入目标,如下所示。这就解决了问题

var temp = "";
for(var i = 0; i < lines.length; i++){
var line = lines[i];

    if(line.search("Query= ") != -1){ 
        temp += "    <p class='result_name'>    <br>Result name: ";
        //the name starts at 7th char
        temp += line.slice(7);
        //take the next line
        i++;
        // tried to searh for "\n" or "\r" or "\r\n" to end cycle - didn't work
        // so instead I put this for the while condition:
        while(lines[i].length > 2 ){
           temp += lines[i];
           i++;
        }
        //here is where I want the result_name paragraph to end.
        temp += "    </p>    <p>Result(s):</p>";
    }
}
results.innerHTML = temp;

尝试通过更改和删除标签来更改标签没有帮助尝试通过更改和删除标签来更改标签没有帮助是的,确实如此,谢谢!成功了另外,有人能告诉我为什么不能通过寻找换行符来结束while循环吗?行结束语句可能包含\n、或\r\n或\r作为行结束。因此,您可能在仅测试时遇到问题\n。尝试\r\n | | \n | | \r行[i]的内容是什么。indexOf\n<2?这很难看,但这应该起作用,我不认为单独的案例是真的相关的。呃,我要退出,坚持只检查行的长度,不管内容如何。这很有效。谢谢你这么麻烦!是的,确实如此,谢谢!成功了另外,有人能告诉我为什么不能通过寻找换行符来结束while循环吗?行结束语句可能包含\n、或\r\n或\r作为行结束。因此,您可能在仅测试时遇到问题\n。尝试\r\n | | \n | | \r行[i]的内容是什么。indexOf\n<2?这很难看,但这应该起作用,我不认为单独的案例是真的相关的。呃,我要退出,坚持只检查行的长度,不管内容如何。这很有效。谢谢你这么麻烦!是的,你是对的,谢谢@Walfrat的anwserYes更快了你说得对,谢谢@沃尔夫拉特的安瑟尔跑得更快