gpt4 book ai didi

javascript - 动态改变div的ID?

转载 作者:行者123 更新时间:2023-11-30 23:45:19 24 4
gpt4 key购买 nike

我有一堆 id 很奇怪的 div,每个都包含一个视频。它们实际上是视频嵌入代码,但对我来说并不常见。这是一个例子:

<div id="evp-1fae4e37639894816f03591bc7009c68-wrap" class="evp-video-wrap"></div><script type="text/javascript" src="http://domain.com/evp/framework.php?div_id=evp-1fae4e37639894816f03591bc7009c68&id=cmVsYXRpb25zaGlwLW1hcmtldGluZy0xLmZsdg%3D%3D&v=1278525356"></script><script type="text/javascript">_evpInit('cmVsYXRpb25zaGlwLW1hcmtldGluZy0xLmZsdg==');</script>

我想做的是创建一个视频播放列表。作为其中的一部分,我使用 div 创建了列表,它还使用 onclick 属性来触发我的 JS 函数在视频之间切换。它的外观如下:

<div class="vid-list" onclick="switchvideo('http://domain.com/html-vids/headline-vids/second-vid.html', 2)"><p>This a video tutorial for blah blah blah.</p></div>

问题是,每次我切换到另一个视频时,嵌入代码的 div id 也会发生变化,否则它将无法工作。所以我需要在将视频脚本加载到 div 内之前更改它。我尝试使用以下 JS 函数来实现这一点:

function switchvideo(url, vidnumber)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET",url,false);
xmlhttp.send(null);
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("GET",url,false);
xmlhttp.send();
}

var div_node = document.getElementByClass('evp-video-wrap');

if ( vidnumber == 2 ) {
div_node.id = 'evp-78c0b7c4f6d3377954825f145734fd5c-wrap';
}
document.getElementById(div_node.id).innerHTML=xmlhttp.responseText;
}

显然它不起作用。我怀疑问题出在上面粗体的行上。我尝试使用“div_node.id”按“class”及其 id 获取元素。我假设通过执行“document.getElementByClass”,我获得了对该元素的引用,以便我可以使用它来操作其其他属性。但我不确定...有人可以启发我吗?

最佳答案

没有 getElementByClass() 方法。有一个 getElementByClassName() 但并非在每个浏览器中都可用。

您可以使用以下一个:

// http://www.dustindiaz.com/getelementsbyclass/
function getElementsByClass(searchClass, node, tag) {
var classElements = new Array();
if (node == null) node = document;
if (tag == null) tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
for (i = 0, j = 0; i < elsLen; i++) {
if (pattern.test(els[i].className)) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}

然后你可以将其称为

getElementByClass('evp-video-wrap');

你的ajax有点棘手,但这是一个更通用的:

function getXmlHttpObject() {
var xmlHttp;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
} catch (e) {
// Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if (!xmlHttp) {
alert("Your browser does not support AJAX!");
}
return xmlHttp;
}


function ajax(url, onSuccess, onError) {

var xmlHttp = getXmlHttpObject();

xmlHttp.onreadystatechange = function() {
if (this.readyState === 4) {

// onSuccess
if (this.status === 200 && typeof onSuccess == 'function') {
onSuccess(this.responseText);
}

// onError
else if(typeof onError == 'function') {
onError();
}
}
};
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
return xmlHttp;
}

最后你的代码变成:

function switchvideo(url, vidnumber) {
var div_node = getElementByClass('evp-video-wrap')[0];

// make a call to the url, and execute the
// callback when the response is available
ajax(url, function( responseText ){
if (vidnumber == 2) {
div_node.id = 'evp-78c0b7c4f6d3377954825f145734fd5c-wrap';
}
document.getElementById(div_node.id).innerHTML = responseText;
});
}​

可以看到整个代码[ here ]

关于javascript - 动态改变div的ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com