条件函数的结构?

时间:2013-07-25 04:55:30

标签: javascript

我有多个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;

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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]();

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

答案 2 :(得分:2)

for(var i = 0; i < max_number; ++i)
{

If(document.getElementById('myid'+i) != null)
// do Something
}