0

我正在尝试做一个函数,使用一些其他函数,使用 JS 循环遍历具有特定名称的类,并在这些 HTML 标记内的任何内容的末尾添加一个“*”。它工作不完美,所以我需要改变什么?类名是“价格”。

function insertAfter(referenceNode, newNode) {
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

function getValues(objName) {
    var arr = new Array();
    var el = document.createElement("span");
    el.innerHTML = "*";
    arr = document.getElementsByClassName(objName);
    for(var i = 0; i < arr.length; i++) {
        var obj = document.getElementsByClassName(objName).item(i);
        insertAfter(obj, el)
    }
};

getValues("price");
4

2 回答 2

1

做这个

function getValues(objName) {
            var arr = new Array();
            arr = document.getElementsByClassName(objName);
            for (var i = 0; i < arr.length; i++) {
                var el = document.createElement("span");
                el.innerHTML = "*";
                var obj = document.getElementsByClassName(objName).item(i);
                insertAfter(obj, el)
            }
        };

el实际上,每次您想将该元素插入标签时,您都需要创建一个新元素,否则您最终只会*在具有“价格”类的 DOM 中最后一个标签的末尾添加单个元素。

于 2013-01-22T10:52:05.310 回答
0

“它不工作”是什么意思?

document.getElementsByClassName 已经返回一个数组,你不需要获取它两次,这样做:

arr = document.getElementsByClassName(objName);
for(var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    insertAfter(obj, el);
}

重写您的 insertAfter 以真正执行 insertAfter:

function insertAfter(referenceNode, newNode) {
    referenceNode.insertAfter(newNode, referenceNode.lastChild);
}

在这里查看一个工作示例:http: //jsfiddle.net/BJ3YR/

于 2013-01-22T10:53:17.477 回答