更改 Class 为 X 的元素的 ID

Mix*_*oid 1 javascript dom

我正在尝试通过 Ajax 更改 div 的 ID。
因为 ID 有一个动态值,所以我在 div 中添加了一个类。

我的php代码:

    echo '<div id="pagemenu">
            <ul id="tabpanel">';
$tel = 0;
while($totaalklanten > -4)
{
    $tel++;
    echo '<li><a href="#'.$tel.'" name="'.$tel.'" onclick="listklant(\'klant.php\',this.name)">'.$tel.'</a></li>';
    $totaalklanten = $totaalklanten - 5;
}
echo '</ul>';
echo '<div class="changeme" id="default">';
//Lots of query of php stuff here to execute
echo '</div>
Run Code Online (Sandbox Code Playgroud)

'changeme' 类的 div 是受害者。

到目前为止我的 Ajax 代码:

xmlhttp = new XMLHttpRequest();

function listklant(serverPage, pagenum)
{
    xmlhttp.open("GET", serverPage);



    document.getElementsByClassName('changeme').id = pagenum;
    alert(document.getElementById(pagenum));
    alert(document.getElementsByClassName('changeme').id);


    xmlhttp.onreadystatechange = function()
    {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            obj.innerHTML = xmlhttp.responseText;
        }
    }
    xmlhttp.send(null);
}
Run Code Online (Sandbox Code Playgroud)

第一个警报给了我 'null' :(...
然而第二个警报给了我正确的值,所以 'pagenum' 被成功应用。
我做错了什么?以及如何解决它?
(如果还有什么我可以改进,请大喊)

lon*_*day 5

document.getElementsByClassName('changeme').id = pagenum;
Run Code Online (Sandbox Code Playgroud)

这行代码并没有设置id与类元素changemegetElementsByClassName返回一个NodeList包含元素。要设置一个id对物业NodeList。显然,这并没有反映在列表中的元素上。

为此,请处理元素本身。如果类中有一个元素,那很简单:

document.getElementsByClassName('changeme')[0].id = pagenum;
Run Code Online (Sandbox Code Playgroud)

如果您有更多元素,则需要一个循环:

var els = document.getElementsByClassName('changeme');
for (var i = 0; i < els.length; i++ ) {
    els[i].id = pagenum;
}
Run Code Online (Sandbox Code Playgroud)

但是,更改元素的id. 在这里使用类可能是一个更好的主意。


编辑为了解释为什么你的第二个alert作品,这是因为NodeList调用getElementsByClassName. 从规范

getElementsByClassName使用相同的参数在 HTMLElement 对象上再次调用方法 [ ] 时,用户代理可能返回与先前调用返回的对象相同的对象。