1

我有多个 html dom 文档,并且某些元素在不同的文档上具有相同的 id,我只想编写一个函数来查询传递给它的任何文档,我将解释:

目前我有这个结构:

If(document.getElementById('myid1') != null)
// do Something

If(document.getElementById('myid2') != null)
// do Something

If(document.getElementById('myid3') != null)
// do Something

If(document.getElementById('myid4') != null)
// do Something

If(document.getElementById('myid5') != null)
// do Something

If(document.getElementById('myid6') != null)
// do Something

有没有办法更好地构建这个?如果我为每一页(文档)编写一个函数,我将有 30 个函数做同样的事情,所以我想只编写一个全局函数。有什么建议吗?

编辑 :

If(document.getElementById('name') != null)
document.getElementById('name').value = name;

If(document.getElementById('company') != null)
document.getElementById('company').value = com;

If(document.getElementById('email') != null)
document.getElementById('email').value = email;

If(document.getElementById('mail') != null)
document.getElementById('mail').value = email;

提前致谢。

4

3 回答 3

3

您可以在所有页面中创建一个 js 文件并导入一个 js 文件。然后在该 JS 页面中以一种可以识别来自哪个页面的请求的方式编写,如果知道,您将了解该页面中的元素。

于 2013-07-25T04:58:23.690 回答
3

在评论中,您注意到所有“做某事”位所做的都是填充value属性。我会说这是一个常见的结构。

在最简单的形式中,您需要保留元素 ID 和值对的列表,以尝试放入这些元素。由于元素 ID 是唯一的,我认为映射是合适的:

var values = {
    myid1: "Hello, world! You're looking at the element with the ID of myid1.",
    myid2: "I'm the element with the ID of myid2!"
};

很明显,这个过程是循环遍历这些对,寻找元素。如果存在,请设置值;否则,不是问题:继续前进。

在 JavaScript 中,您可以使用for..in循环遍历对象中的对。不过,这有点棘手,因为您只想检查自己的属性;也就是说,专门属于该对象的属性,并且不是从其他地方继承的。

无论如何,当放在一起时,你最终可能会得到这样的结果:

for(var id in values) {
    if(Object.prototype.hasOwnProperty.call(values, id)) {
        var element = document.getElementById(id);
        if(element !== null) {
            element.value = values[id];
        }
    }
}

超越价值观

这种方法显然适用于常量值,但您可能希望从其他地方检索值。我们可以将此解决方案扩展到动态计算的值吗?

是的。我们可以存储函数,而不是将字符串存储为映射的值。当我们想要访问该值时,我们只需调用该函数,该函数可以为所欲为来计算该值。新的映射可能如下所示:

var values = {
    // If there's something on the page with an ID of nameDisplay, prompt the
    // user for what to fill it with.
    nameDisplay: function() {
        return prompt("What's your name?", "");
    },
    // If there's an element with an ID of time on the page, fill it with the
    // current time.
    time: function() {
        var now = new Date();
        return now.toString();
    }
};

我们的循环几乎不需要修改。我们需要做的就是将赋予value其值的行更改为:

element.value = values[id]();

注意括号。现在我们正在调用我们存储在映射中的函数。

于 2013-07-25T05:06:29.270 回答
2
for(var i = 0; i < max_number; ++i)
{

If(document.getElementById('myid'+i) != null)
// do Something
}
于 2013-07-25T05:02:01.940 回答