【问题标题】:How do I convert the "name" and "content" attributes of specific meta tags into a JavaScript object literal?如何将特定元标记的“名称”和“内容”属性转换为 JavaScript 对象文字?
【发布时间】:2019-04-24 11:11:33
【问题描述】:

我有几个看起来像这样的元标记:

<meta name="Addan:id" content="2098949824982" />
<meta name="Addan:name" content="Addan Salahehin" />

如何将这些 meta 标签(不止 1 个)转换为如下所示的 JavaScript 对象:

{ "id" : "2098949824982" , "name" : "Addan Salahehin" }

我尝试使用 forEach 方法,但 Addan 没有被删除。

我想使用 Vanilla JS 而不是 jQuery。

【问题讨论】:

  • "我尝试使用 forEach 方法" - 请发布您使用过的代码,即使它不起作用

标签: javascript object type-conversion meta


【解决方案1】:

您可能会收到此错误,因为您没有删除或检查元名称的 "Addan:" 部分,请尝试改用它:

let metas = {};
[...document.querySelectorAll("meta")].forEach(meta => {
  const split = meta.name.split(":");
  if (split[0].trim().toLowerCase() == "addan") {
    metas[split[1]] = meta.content;
  }
});
console.log(metas);
<meta name="Addan:id" content="2098949824982" />
<meta name="Addan:name" content="Addan Salahehin" />

当你运行 sn-p 时,你应该得到这个输出:

Object { id: "2098949824982", name: "Addan Salahehin" }

注意:这是一个有效的code pen

【讨论】:

  • 我给你做了一个sn-p
  • @mplungjan 谢谢!我不知道该怎么做:)
  • 我觉得这更优雅:document.querySelectorAll("meta[name^=Addan]").forEach(meta =&gt; metas[meta.name.split(":")[1]] = meta.content );
【解决方案2】:

您可以使用名称^=Addan 来选择特定的元数据并创建一个数组或一个对象

// Array: 
let metas = [...document.querySelectorAll("meta[name^=Addan]")].map(meta => {  
    return {[meta.name.split(":")[1]] : meta.content} 
});
console.log(metas);

// Object

metas = {};
document.querySelectorAll("meta[name^=Addan]").forEach(meta =>   
    metas[meta.name.split(":")[1]] = meta.content
);
console.log(metas);
<meta name="Addan:id" content="2098949824982" />
<meta name="Addan:name" content="Addan Salahehin" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多