我不断得到GT;使用子串或切片时

时间:2018-10-15 15:58:11

标签: javascript

我正在使用播放列表构建视频播放器,并使用符号“>”指示当前正在播放哪个视频。我具有以下功能:

player.onended = function () {
        pl.childNodes[curVideo + 1].childNodes[0].innerHTML = pl.childNodes[curVideo + 1].childNodes[0].innerHTML.slice(1);
        ++curVideo;
        if (playlist.length == 0) {
            player.setAttribute("src", "");
        }
        else if (curVideo < playlist.length) {
            player.setAttribute("src", playlist[curVideo]);
            pl.childNodes[curVideo + 1].childNodes[0].innerHTML = ">" + pl.childNodes[curVideo + 1].childNodes[0].innerHTML;
        } else {
            curVideo = 0;
            player.setAttribute("src", playlist[curVideo]);
            pl.childNodes[curVideo + 1].childNodes[0].innerHTML = ">" + pl.childNodes[curVideo + 1].childNodes[0].innerHTML;
        }
    }

我没有在代码中的其他任何地方更改此字符串,但是当我用slice或substring删除此“>”而不是获取没有它的字符串时,我会将此符号替换为“ gt;”。

删除前:

>htt://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4

删除后:

gt;htt://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4

2 个答案:

答案 0 :(得分:1)

您假设>将以>的身份返回您。它不在您的示例中,而是以named character reference &gt;的形式返回给您。请记住,innerHTML是HTML。在大多数情况下,>不一定要使用命名字符实体,但这并不罕见。

这可能不是可靠的跨浏览器,因此要删除它,如果您需要使用innerHTML,我可能会这样做:

l.childNodes[curVideo + 1].childNodes[0].innerHTML =
    pl.childNodes[curVideo + 1].childNodes[0].innerHTML.replace(/^(?:>|\&gt;)/, "");
// ----------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^

...无论将其以>还是&gt;的形式返回,它将在字符串的开头将其删除。

或者,使用innerTexttextContent,这样就不必处理HTML。

答案 1 :(得分:0)

使用innerText属性而不是innerHTML修复