我有以下脚本:

$(".balkenclosed").click(function() {
window.location = $(this).find("a").attr("href");
return false;
});


我尝试添加一个.replace函数,如下所示:

var replace = new Map([
/ [^a-zA-Z0-9\s]/ig, "", $id
]),
id = a;
replace.forEach(function(value, key){
id = id.replace(key, value);
});


它应该像这样在div的id中替换无效字符:

<div class="balken"><div class="balkenopen"><a id="2our$ / team/2$"
style="text-decoration:none; color:black;" href="#2our$ / team/2$">
our team</a></div></div>


在这种情况下,结果应为id:“ our_team”和href:“ our_team”

我的方法行不通,我觉得自己完全错了。
我真的很感谢任何正确方向的提示

最佳答案

我已经写了jquery,它将产生您想要的结果,但是您可以优化。希望这会帮助你。


  请考虑它将搜索整个锚标记,并在找到匹配项时进行替换。将$(a)替换为更适合特定搜索的选择器。


$('a').each(function() {
  var self = $(this);
  var id = self.attr('id');
  var href = self.attr('href');
  if (id)
    self.attr('id', stripEverything(id, '_'));
  if (href)
    self.attr('href', '#'+stripEverything(href, '_'));
});

function stripEverything(string, replaceSpaceWith) {
  return string.replace(/[^a-zA-Z ]+/g, '').split(' ').filter(function(e) {
    return e
  }).join(replaceSpaceWith);
}


您可以在Fiddle查看解决方案

关于javascript - 在现有脚本中包括带有正则表达式映射方法的.replace函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48170983/

10-12 06:35