【问题标题】:cannot read property 'src' of undefined无法读取未定义的属性“src”
【发布时间】:2012-02-24 20:32:14
【问题描述】:

我从以下 JS 的标题中得到错误:

$('.videoMedia .youtubeLink').each(function(i) {
 // Defining the iframe for each iteration
 var iframe = $(this).parents('li').find('.portfolio_det iframe');

 // Cutting the src from the iframe in pieces
 var begin = 'http://www.youtube.com/embed/'.length;
 var end = iframe[0].src.length-'?fs=1&feature=oembed'.length;

未捕获的类型错误:无法读取未定义的属性“src”

 // Substracting the pieces
 var videolink = iframe[0].src.substring(begin,end);

 // Replacing the link with the leftovers
 $(this).attr('href', 'http://www.youtube.com/watch?v=' + videolink); 

     // Removing the iframe
 $(iframe).remove();
});

任何想法为什么它认为它未定义?由于 iframe 是在函数之上定义的。欢迎提出建议:)

编辑

此脚本在“action”中的示例(不确定这样称呼它,因为没有任何动作正在进行)见于:http://sqps.nl/bdare/?page_id=279

目前它仅适用于右侧/底部的最后一个元素(使用 bdare / youtube img)

编辑 2

奇怪的是,它以前可以工作(在本地主机上使用 xampp)

编辑 3 - 已修复问题

在此我要感谢所有参与此讨论的人 :) 我找到了解决方案..我的代码没有任何问题:) 来自 wordpress 帖子的输入导致脚本无法正常运行,更改帖子的内容解决了问题:)

干杯:)

【问题讨论】:

  • 您是否尝试过console.log(iframe) 以确保它获取元素?我怀疑这是因为您使用的是[0],它可能没有返回数组/节点列表。
  • 您能否也发布您的 HTML,以便我们可以看到它的结构,并了解您需要如何遍历它。另外,如果你运行这个:alert(iframe.length) 如果你看到0,这意味着你的 iframe 没有被发现。
  • 您的选择器没有选择任何 iframe。因此iframe[0]undefined,而undefined.src 不存在。你能显示你的 HTML 代码吗?
  • 我刚刚检查了您网站的 HTML,问题是 .find('.portfolio_det iframe') 选择器 - .portfolio_det 元素不包含 iframe。
  • .portfolio_det 仅在 li.videoMedia 的第一次迭代中不包含 iframe。其他 2 个确实包含一个 .portfolio_det。所以对我来说还是有点奇怪

标签: javascript jquery undefined typeerror


【解决方案1】:

这一行:

var iframe = $(this).parents('li').find('.portfolio_det iframe');

没有找到任何元素。这意味着 iframe[0] 未定义而不是对象,因此任何对属性访问的尝试都将导致您遇到错误。

验证您的标记是否正确。

【讨论】:

  • 也许我错了,但如果 iframe[0] 仍然是一个 jQuery 对象,即使标记是正确的,src 也是未定义的
  • @Nicola: iframe[0] 不会是 jQuery 对象。 iframe 是一个 jQuery 对象,[0] 是尝试从该 jQuery 对象访问 DOM 元素。
  • 好的,我想你需要 get(0) 访问 DOM 元素
【解决方案2】:

试试吧

var end = iframe.get(0).src.length-'?fs=1&feature=oembed'.length;

iframe 是对 jQuery 对象的引用,所以 iframe[0] 是。这就是你得到一个错误的原因:src is not a valid property of jQuery object

【讨论】:

  • .get(0)[0] 是同义词,jQuery 对象的数字属性通常是 DOM 对象,而不是 jQuery 对象。
猜你喜欢
  • 1970-01-01
  • 2020-04-06
  • 2020-10-30
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多