jQuery - .attr不是一个函数

jQuery - .attr is not a function

本文关键字:一个 函数 attr jQuery      更新时间:2023-09-26

构建一个WordPress插件,创建一个自定义风格的视频播放器,基于包含youtube视频id的短代码,它运行良好。但现在我必须将其转换为允许在同一页面上播放多个视频。我通过类名抓取所有玩家元素,然后获取它们的id。YouTube视频id被附加到每个玩家的data-id属性。在插件的单视频版本中,我可以使用$(#playerid).att('data-id')来抓取属性。在v2.0中发生了两件奇怪的事情……首先是我不能再使用$来指定jQuery对象,因为WordPress使用兼容模式(也许我应该想知道为什么我可以在以前的版本中使用$…),但这很容易解决。第二个,我卡住了,是我不能使用attr。它说

attr不是一个函数

我尝试过。attr('data-id'), .data('id'),并转换为香草。getattribute,但没有任何作用。我已经检查了变量是指向正确的对象,但我不能得到它的属性…任何帮助吗?

我将只发布第一行,所有的检查,直到你得到attr

var playerids = [];
var players = document.getElementsByClassName("video-player");
for (x = 0; x < players.length; x++) {
    playerids[x] = players[x].id;
}
//for each vidid, create a player
for (i = 0; i < players.length; i++) {
    var video_id = jQuery(playerids[i]).attr('data-id');
}

新信息:将全局变量从Vanilla更改为jQuery,现在我可以在全局变量上使用.attr或.data。这是我新的工作代码…为什么局部变量不起作用,而这个能起作用呢?

//find all player divs
var players = jQuery(".video-player");
//get the player div ids
var playerids = [];
for (x = 0; x < players.length; x++) {
    playerids[x] = players[x].id;
}
//for each player div, get vidid and create player
for (i = 0; i < players.length; i++) {
    var this_video = jQuery(players[i]).data('id');

你可以试试下面的代码:

var video_id = jQuery('#' + playerids[i]).attr('data-id');

因为playerid [i]只有playerid像"playerid"

你的代码中明显错误的是在jQuery(playerids[i]).attr('data-id');处分配一个没有#标志的id选择器

正确的语法应该是:jQuery('#' + playerids[i]).attr('data-id');

如果使用id选择器不是隐式的,请尝试这样做:

jQuery( ".video-player" ).each(function( index ) {
  console.log( index + ": " + jQuery(this).attr('data-id') );
});