查找并用匹配的对象值替换图像src

时间:2019-02-18 10:38:48

标签: javascript arrays node.js object

我正在尝试将所有src值替换为匹配的键值,文本如下所示:

Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum <br /><br />
lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem <img src="71521" alt="[ppm:alt id=17835]" height="426" width="638" /> ipsumlorem ipsumlorem ipsum

我的对象如下:

    var mapObj = {
        '71505':'https://images.e12b64dd10dd068f0b4b6e8e9e5e/71505.jpg',
        '69451':'https://imagesf697987a167a07402549e86089d/69451.jpg',
        '71521':'https://images673d2cf1bfcb6fcc1d30f91/71521.jpg',
        ...
    }

我想检查src值是否与对象键匹配,然后用对应的键值替换所有出现的值,我想要的输出是

Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum <br />
lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem

到目前为止,我有以下内容,但不起作用

var res = row['Description'].replace(/\[(\w+)\]/g, function(s, key) {
   return mapObj[key] || s;
});

我尝试了下面回答的所有解决方案,但仍然无法替换src。

我的html源来自excel工作表,我正在这样阅读

const rows = fs.createReadStream(csvFilePath,{encoding: `'binary'}).pipe(parser);`

3 个答案:

答案 0 :(得分:2)

使用keys遍历mapObj的{​​{1}}。每次将forEach替换为key值。您说文本看起来像这样” ,所以我认为您要输入字符串

key

答案 1 :(得分:1)

只需遍历mapObj的所有属性,然后通过执行src可以找到document.querySelector("[src='71505']")与键的元素相等的任何元素,之后只需修复{{ 1}}。

src
var mapObj = {
  '71505': 'https://images.e12b64dd10dd068f0b4b6e8e9e5e/71505.jpg',
  '69451': 'https://imagesf697987a167a07402549e86089d/71513.jpg',
  '71521': 'https://images673d2cf1bfcb6fcc1d30f91/71521.jpg'
};

for (var key in mapObj) {
  document.querySelectorAll(`[src='${key}']`).forEach(item => item.src = mapObj[key]);
}
console.log(document.body.innerHTML);

如果HTML为字符串形式,并且您不想将其解析为HTML,则应将Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum <br /> <img src="69451" alt="[ppm:alt id=17835]" height="426" width="638" /><br /> lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem <img src="71521" alt="[ppm:alt id=17835]" height="426" width="638" /> ipsumlorem ipsumlorem ipsum和src ='$ {key}'的所有匹配项替换为{{1 }}。像这样:

src="${key}"

答案 2 :(得分:1)

您可以将文本包装在容器中,然后使用querySelectorAll获取所有img。然后迭代该节点列表,并将该值替换为对象的相应结果

var a = {
  "Data": [{

      "name": "John",
      "age": 30
    },

    {
      "joined on": "Jan 2015",
      "working on": "Automation",
    }
  ]
}
console.log(a.Data[0].name)
var mapObj = {
  '71505': 'https://images.e12b64dd10dd068f0b4b6e8e9e5e/71505.jpg',
  '69451': 'https://imagesf697987a167a07402549e86089d/71513.jpg',
  '71521': 'https://images673d2cf1bfcb6fcc1d30f91/71521.jpg'
}

let txt = document.getElementById('content').querySelectorAll('img').forEach(function(item) {
  let srcVal = item.getAttribute('src');
  item.setAttribute('src', mapObj[srcVal])
});