动态更改div的ID?
问题描述:
我有一堆div与奇怪的ID和每个人都包含一个视频。它们实际上是视频嵌入代码,但它们对我来说并不常见。这里有一个例子:动态更改div的ID?
<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的列表,这些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;
}
最后你的鳕鱼E变成:
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]
答
getElementByClass不是标准的方法。有没有可能为此使用框架? jQuery有一个很好的机制来按类来搜索元素,就像其他框架一样。它还使得以跨浏览器支持的方式来执行AJAX位变得更加容易。
function switchvideo(url, vidnumber)
{
$.get(url, function(data) {
var div_node = $('.evp-video-wrap');
if (vidnumber == 2) {
div_node.attr('id', 'evp-78c0b7c4f6d3377954825f145734fd5c-wrap');
}
div_node.html(data);
});
}
另一种方法是写自己的getElementByClass或特定代码搜索按类核实。注意:我假设你只对第一场比赛感兴趣。
function getDivByClass(klass)
{
var regex = new RegExp('(^|\\s+)' + klass + '(\\s+|$)');
for (div in document.getElementsByTagName('div')) {
if (regex.text(div.className)) {
return div;
}
}
return null;
}
我不知道** **字符是怎么回事。他们不应该在那里。它们之间的文字应该以粗体显示。 – Joann 2010-07-08 16:06:32
您不能在代码块中使用粗体字符 – 2010-07-08 16:12:42