1

我有许多变量存储在外部文件(settings.js)中:

var company = "Apple";
var city = "Toronto";
var weather = "Sunny";

在我的 HTML 中,我引用了将存储所有变量的 jQuery 和 settings.js。标签之间的body代码如下所示:

<div class="company"></div>
<div class="city"></div>
<div class="weather"></div>

我正在尝试制作一些智能 jQuery 代码,它将读取 settings.js 文件,找到变量并加载它,然后找到与变量具有相同类名的 HTML 元素,最后用变量值更新该元素的内容。

执行函数 HTML 后应该如下所示:

<div class="company">Apple</div>
<div class="city">Toronto</div>
<div class="weather">Sunny</div>

注意: HTML 中可能有多个位置具有相同的类名。所有这些都将在 FF 本地运行。这是测试/演示项目,所以我不太担心性能。

JSF中:

4

3 回答 3

5

使用对象来包含变量,然后您可以使用字符串引用属性:

 // Variables 
    var data = {
        company:"Apple",
        city:"Toronto",
        weather:"Sunny"

    }

    ​$("div").each(
        function(){
        this_class = $(this).attr("class");
        $(this).text(data[this_class]);
        }
    );​​​​​​
于 2012-12-12T19:27:29.407 回答
4

这是不可能的,因为无法获取给定范围内的变量列表(请参阅 获取范围内的所有变量)。

如果您要var省略(不一定推荐),那么它们将各自附加到window对象上,您可以执行以下操作:

$("div").each(function () {
   $(this).text(window[$(this).attr('class')]);
});

作为替代方案,您还可以在对象中定义这些值,而不是将每个值都作为自己的变量。

于 2012-12-12T19:26:47.083 回答
0

你需要某种范围来实现这一点。只需将它们定义为var x将它们放在窗口上即可。因此,您可以遍历窗口上的所有变量以找到它们:

for(var k in window) {
    // do stuff
}

但正如您可能想象的那样,将会有很多窗口变量(我的 chrome 浏览器中的 45 个,现在在这个页面上。

Matanya 刚刚在范围界定到位后击败了我。但以上是其中的一些原因。

编辑:我实际上会以另一种方式来做,不是在 div 上选择,而是在类名上选择。你会在你感兴趣的类上选择一个小得多的结果集(无论如何,对于典型的页面 - div 通常像糖果一样洒满)。

for(var k in data)
{
    $("."+k).html(data[k]);
}
于 2012-12-12T19:28:20.027 回答