Javascript 无法读取属性';指数';空的

Javascript 无法读取属性';指数';空的,javascript,jquery,Javascript,Jquery,代码正常工作,但控制台日志show无法读取null的属性'indexOf' 它不能在jsfiddle.net中看到,顺便说一句,这里是我想要的演示 因为标记很糟糕,所以我必须找到br的每个nodevalue,并获得以作詞, 作曲, 編曲, 及監製. 它可以工作,但为什么控制台日志中会出现错误 $('br').each(function () { if ((this.nextSibling.nodeValue.indexOf('作詞') > -1) || (this.nextSib

代码正常工作,但控制台日志show无法读取null的属性'indexOf'

它不能在jsfiddle.net中看到,顺便说一句,这里是我想要的演示

因为标记很糟糕,所以我必须找到br的每个nodevalue,并获得以作詞, 作曲, 編曲, 及監製. 它可以工作,但为什么控制台日志中会出现错误

$('br').each(function () {
    if ((this.nextSibling.nodeValue.indexOf('作詞') > -1) || (this.nextSibling.nodeValue.indexOf('作曲') > -1) || (this.nextSibling.nodeValue.indexOf('編曲') > -1) || (this.nextSibling.nodeValue.indexOf('監製') > -1)) {

        $(this.nextSibling).remove();
        $(this).remove();
    }
});

我认为将您的代码更改为以下代码会起作用:

$('br').each(function () {
    console.log($(this).get(0).nextSibling.nodeValue.indexOf('作詞') > -1);
});

它抱怨
nextSibling
不存在。你必须防御性地编写代码

$('br').each(function () {
    if (!this.nextSibling) {
      return;
    }
    var nodeValue = this.nextSibling.nodeValue.trim();
    var invalid = ['', '作詞', '作曲', '編曲', '監製'];
    if (invalid.indexOf(nodeValue) !== -1) {
        $(this.nextSibling).remove();
        $(this).remove();
    }
});

请注意,我使用的
Array.indexOf
适用于Internet Explorer 9+。因此,如果您需要支持IE8,您必须使用polyfill或其他实现。

这太棒了,谢谢!但是我有一个问题,为什么在行刑后的乞讨处会有一个?我还以为他们被移除了?因为br元素之间有一个文本元素。第一个br有一个nextSibling,它是一个文本元素,nextSibling不是下一个br。该文本元素恰好是一个空字符串。那么如何删除该内容?您正在删除后跟特定文本的
br
元素。删除
br
后跟空文本是一样的!如果此.nextSibling.nodeValue.trim()=='',则删除br和空文本节点。是否可以更新代码?我尝试了var nodeValue=this.nextSibling.nodeValue.trim();它不起作用