我有一个html元素列表,它们有一个'data-'属性,指定要查看的下一个元素(这是一个视频列表)。
[data-PosInListVid ='nextListVid'] - >表示此元素是下一个
[data-PosInListVid ='ListVid'] - >表示此元素位于列表中间
[data-PosInListVid ='lastListVid'] - >表示列表在此处停止
当视频进入时,我调用.Ajax()并成功调用一些函数。其中一个功能是从上一个Video中删除属性data-PosInListVid ='nextListVid',并将其插入List的下一个元素中。我是这样做的:
function changeVidList($newVid) {
//In the List, Videos have positions so...
var newPosition = $newVid.attr("data-ListVidOrder"); //get the position of the former "nextVideo"
var nextPosition = Number(newPosition) + 1; //specify what is the position of the Next video.
var $videoAfterNewVideo = $("[data-ListVidOrder='" + nextPosition + "']"); //Get the element with next position
$newVid.attr("data-PosInListVid", "ListVid"); // edit attribute data-PosInListVid from nextListVid to ListVid
$videoAfterNewVideo.attr("data-PosInListVid", "nextListVid"); // edit attribute data-PosInListVid from ListVid to nextListVid making it next in line.
return false;
};
问题:当它尝试使用:
获取新元素时var newVidObjDiv = $("[data-PosInListVid='nextListVid']");
newVidObjDiv未定义,尽管指定了元素。
我猜这是传播.attr()更改的问题。 Normaly我使用.on()进行传播,但不知道如何通过.attr()告知DOM有变化,并准备好用jquery选择。
任何人都可以帮助我吗?非常感谢你
编辑:
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.ENDED) {
var newVid;
newVid = $("[data-PosInListVid='nextListVid']").attr("data-nextListVidYTID");
VidID = newVid;
var newVidObjDiv = $("[data-PosInListVid='nextListVid']"); //<--- Here is where I call newVidObjDiv
ajaxGetVid(newVidObjDiv);
return false;
}
}
function ajaxGetVid($link) {
$.ajax({
type: options.type,
url: options.url,
data: options.data,
dataType: "html",
success: function (data) {
//console.log(data)
$(options.target).html(data);
onYouTubeIframeAPIReady();
changeVidList($link); // <---- .attr() changing.
}
});
流程是:
视频开启
视频结束
AJAX CALL
视频开始
更改DOM
视频结束
使用新DOM调用AJAX
视频无法启动
凌晨4点20分,我可能会犯一个愚蠢的错误......