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插件将自动失败。
从这里的代码可以看出,如果没有元素时
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; } |
这很糟糕。这个插件确实有一个可以禁用的
1 | if (opts.debugMode && $(this).length == 0) { |
然后确保在设置中设置
——
但这最终影响IE的原因是,它没有在关闭开发工具时(并且在IE6/7中从未定义)定义的
1 2 3 4 5 | if (!window.console) { window.console = { log: function() {} }; } |
现在它将找到
在
如果您有这种倾向,那么向开发人员提交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 }); } |