JQuery .attr没有按预期工作

rai*_*son 5 javascript jquery attr

使用JQuery我正在从页面上加载的所有脚本中搜索并输出src属性.这是我的代码:

$('script').each(function(index, value) { 

    var src = $(this).attr('src');
    var src = src || 'no source';
    console.log(src);

}
Run Code Online (Sandbox Code Playgroud)

我们正在搜索的示例脚本:

<script type='text/javascript' src='http://domain.co.uk/wp-includes/js/jquery/jquery.js?ver=1.11.0'></script>
Run Code Online (Sandbox Code Playgroud)

和控制台输出将是:

http://domain.co.uk/wp-includes/js/jquery/jquery.js?ver=1.11.0 
Run Code Online (Sandbox Code Playgroud)

这很好,所有这些src都在输出.但是有一个例子我得到了一个错误.当脚本将javascript直接输出到包含'src'的页面时,会出现问题.在这个例子中,我得到以下错误:Uncaught TypeError:无法读取undefined的属性'split'

我可以看到这是因为我的代码从qouputed javascript中获取了src.我在底部包含了这个Javascript,以帮助准确显示我正在谈论的内容.

具体的行是:s.src ='// api.usersnap.com/load/47134af3-5898-4c09-88c9-6aed89cfac7f.js';

并且在错误之前,console.log输出:

//api.usersnap.com/load/47134af3-5898-4c09-88c9-6aed89cfac7f.js

摘要

我以为.attr只会抓取目标元素中的属性.我如何让它做到这一点并忽略似乎导致此错误的所有其他内容.

违规的脚本输出

    <script type="text/javascript" data-cfasync="false">
                (function() {
                    var s = document.createElement('script');
                    s.type = 'text/javascript';
                    s.async = true;
                    s.src = '//api.usersnap.com/load/47134af3-5898-4c09-88c9-6aed89cfac7f.js';
                    var x = document.getElementsByTagName('head')[0];
                    x.appendChild(s);
                })();
    </script>
Run Code Online (Sandbox Code Playgroud)

The*_*Wes -3

我觉得是这样的。如果您可以创建一个小提琴,我们可以更好地告诉您,但正在发生的情况是attr('src')返回未定义,然后您尝试在其上调用函数/属性。基本上是一个空异常。

在尝试操作“src”之前,我只想测试它是否被定义。