【问题标题】:Shorten repetitive/multiple properties using Javascript使用 Javascript 缩短重复/多个属性
【发布时间】:2020-01-04 04:27:11
【问题描述】:

我正在尝试通过重复属性传播值以设置某些节点的内容。我这样做的方式是有效的。然而,正如我所提到的,它是重复的,而且看起来有点令人沮丧。还有其他方法可以缩短我的代码吗?

for (var i = 0; i < 1; i++) {
    var title = document.querySelector("h1.title"),
        date = document.querySelector(".article-date"),
        tme = document.querySelector(".article-tme"),
        src = document.querySelector(".source"),
        user = document.querySelector(".user"),
        tip = document.querySelector(".tip");
        //.....some other variables...

    title.innerHTML = post[i].titles;
    date.innerHTML = post[i].dates;
    src.innerHTML = post[i].sources;
    tme.innerHTML = post[i].times;
    user.innerHTML = post[i].authors;
    tip.innerHTML = post[i].excerpts;
    //....some other HTML content setting...
}

...其中 "post" = JSON.parse(this.response);

感谢任何有助于减轻这种负担的帮助。谢谢。

【问题讨论】:

    标签: javascript for-loop dom


    【解决方案1】:

    我会使用一个将属性名称映射到选择器的对象:

    const selectorsByProp = {
      titles: 'h1.title',
      dates: '.article-date',
      sources: '.source',
      // ...
    }
    Object.entries(selectorsByProp).forEach(([prop, selector]) => {
      document.querySelector(selector).innerHTML = post[i][prop];
    });
    

    请注意,如果对象值恰好包含纯文本,则分配给元素的textContent 比分配innerHTML 更有意义:

    document.querySelector(selector).textContent = post[i][prop];
    

    也不需要循环,因为您只需执行一次。

    【讨论】:

    • 现在是 IE。您可能在几个小时前就 IE 问题认出了我。即使我为此使用了 polyfill,Object.entries 也无法在 IE 中工作。任何想法如何纠正这个问题?
    猜你喜欢
    • 2020-01-04
    • 2013-11-09
    • 2014-04-06
    • 2020-06-11
    • 2020-12-06
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多