JQuery .attr没有按预期工作

时间:2014-05-22 16:45:53

标签: javascript jquery attr

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

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

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

}

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

<script type='text/javascript' src='http://domain.co.uk/wp-includes/js/jquery/jquery.js?ver=1.11.0'></script>

和控制台输出将是:

http://domain.co.uk/wp-includes/js/jquery/jquery.js?ver=1.11.0 

这很好用,所有这些src都在输出。但是有一个例子我得到了一个错误。当脚本将javascript直接输出到包含'src'的页面时,会出现问题。在这个例子中,我得到以下错误:Uncaught TypeError:无法读取未定义的属性'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>

3 个答案:

答案 0 :(得分:0)

当我尝试它时,我没有问题将src输出到页面上的所有脚本,包括你发布的代码中的脚本。

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

我建议你将jQuery升级到 2.1.1 。我使用 Chrome Version 35 进行测试。

答案 1 :(得分:0)

找到this answer,解决错误“Uncaught TypeError:无法读取未定义的属性'split'”。

  

如果.attr(“class”)返回undefined,则不能在其上调用.split,因为.split是String对象的一个​​方法,不能在undefined上调用。您需要存储.attr(“class”)的结果,然后只有在未定义时才将其拆分。

但是我已经在本地尝试过你的代码了。

我能看到的唯一可能导致错误(取决于所使用的浏览器)的是你已经声明var src两次。

$('script').each(function(index, value) {
    var src = $(this).attr('src');
    src = src || 'no source';
    console.log(src);
});

答案 2 :(得分:-3)

我认为是。如果你可以创建一个小提琴我们可以说得更好,但是发生了什么attr('src')返回undefined,然后你试图调用一个函数/属性。基本上是一个空例外。

我会在你尝试操作之前测试'src'的定义。