代码之家  ›  专栏  ›  技术社区  ›  mused

Javascript:getAttribute()返回对象NodeList?

  •  2
  • mused  · 技术社区  · 10 年前

    所以我要做的是根据HTML“id”属性的值显示一系列图像,这也是图像文件的名称。我已经编写了一个Javascript代码 src 系列中每个图像的url(忽略愚蠢的类名):

    var idnum = document.querySelectorAll(".trollface")[0].getAttribute("id");
    
    var tribe;
    if (idnum < 116903 && idnum > 100000) {
        tribe = "Xana";
    } else if (idnum < 213403 && idnum > 200000) {
        tribe = "Hemi";
    } else {
        tribe ="Theri";
    } 
    
    var icon = document.getElementsByClassName("trollface");
    for(var i = 0; i < icon.length; i++) {
        icon[i].src = "Dot_files/" + tribe + "/Icons/" + idnum + ".png";
    }
    

    这很好,但是正如你所看到的,所有的图像都是相同的 钢筋混凝土 这不是我想要的。

    我遇到的主要问题是获取每个 img id 属性并将其用于自己 img src 网址。

    我已经尝试过 身份证件

    var idnum = document.querySelectorAll(".trollface");
    for(var x = 0; x < idnum.length; x++) {
        idnum[x].getAttribute("id");
    }
    

    但在Chrome中 idnum 是“[object%20NodeList]”,我认为它是一个对象NodeList。这又导致了ERR_FILE_NOT_FOUND(或类似的东西),因为输出url变成 Dot_files/Theri/Icons/[object%20NodeList].png ,不存在。

    使用这个,我尝试将NodeList转换为数组,但在Chrome中仍然得到了相同的结果。

    所以我想问的是: getAttribute("id") 当我用类遍历所有元素时不起作用 trollface ? 如果我只使用上面第一段代码中显示的一行代码,它就可以正常工作了。 也可以重复两次,就像我用 idnum公司 第二次与 icon 。这和我的问题有什么关系吗?

    是否有解决方法?我已经干了几天了,不知道该怎么做。

    谢谢你的帮助,很抱歉发了这么长的帖子。如果需要,我可以提供更多细节/解释。

    1 回复  |  直到 10 年前
        1
  •  2
  •   Ram    10 年前

    不,它没有。如果将 idnum 变量而不是 getAttribute 方法 获取属性 返回一个 一串 不是 nodeList 。不存储 获取属性 电话,你在哪里使用? idnum[x].getAttribute("id"); 它本身实际上什么都做不了。这条线获取值并将其丢弃。

    而且你似乎没有移动 if 第二次迭代的逻辑。

    var idnums = document.querySelectorAll(".trollface");
    
    Array.prototype.forEach.call(idnums, function(el) {
        var tribe, id = el.id;
        if (id < 116903 && id > 100000) {
            tribe = "Xana";
        } else if (id < 213403 && id > 200000) {
            tribe = "Hemi";
        } else {
            tribe ="Theri";
        } 
        el.src = "Dot_files/" + tribe + "/Icons/" + id + ".png";
    });