关于javascript:在处理之前需要更改此jquery代码以检查元素是否存在

Need to change this JQuery code to check for element existence prior to processing

本问题已经有最佳答案,请猛点这里访问。

我有以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
            <script type="text/javascript">
            $(function () {
                $('#js-news').ticker({
                    speed: 0.10,
                    htmlFeed: false,
                    fadeInSpeed: 600,
                    titleText: 'DASHBOARD ALERTS',
                    direction: 'ltr',
                    displayType: 'reveal',
                    controls: false
                });
            });

我想修改它,使它只有在JS新闻出现时才会触发。在旧的IE v10浏览器中,我得到了一个错误:"元素在DOM中不存在",并且相关的页面没有JS news元素。新的浏览器似乎可以应付,但不是IE7、8、9。

感谢您对代码修改的看法。

谢谢。


首先,正如@archer在上面的注释中指出的,这个插件没有正确编码。当在没有元素的jquery对象上调用其方法时,惯用的jquery插件将自动失败。

从这里的代码可以看出,如果没有元素时console不存在,那么这个插件运行console.log()alert()

1
2
3
4
5
6
7
8
if ($(this).length == 0) {
    if (window.console && window.console.log) {
        window.console.log('Element does not exist in DOM!');
    } else {
        alert('Element does not exist in DOM!');    
    }
    return false;
}

这很糟糕。这个插件确实有一个可以禁用的debugMode,但是它没有帮助,因为这里没有使用这个标志。要修改源,可以更改上面的第一行:

1
if (opts.debugMode && $(this).length == 0) {

然后确保在设置中设置debugMode:false

——

但这最终影响IE的原因是,它没有在关闭开发工具时(并且在IE6/7中从未定义)定义的console对象,因此一个简单的解决方案是确保用no-op函数定义对象。

1
2
3
4
5
if (!window.console) {
    window.console = {
        log: function() {}
    };
}

现在它将找到console,并在IE中调用空函数,而不是触发alert()

console对象上还有其他方法可能也应该填写,但最常见的是log()

如果您有这种倾向,那么向开发人员提交bug报告可能不是一个坏主意。这个项目似乎在过去的2年里没有更新过,所以我不知道它是否有帮助,但不会有什么伤害。


添加条件以检查长度:

1
2
3
4
5
6
7
8
9
10
11
if($('#js-news').length){
  $('#js-news').ticker({
                speed: 0.10,
                htmlFeed: false,
                fadeInSpeed: 600,
                titleText: 'DASHBOARD ALERTS',
                direction: 'ltr',
                displayType: 'reveal',
                controls: false
  });
}