麻烦.replace() - 只适用于第一个匹配字符?

Tom*_*Tom 2 jquery replace

我正在尝试在我的jQuery脚本中添加一个函数,该函数根据其alt属性为img构建一个完整的src路径.我们的想法是尽可能使代码变得纤薄,以便处理它的非技术人员不会破坏任何东西; 他们所要做的就是让alt属性正确,路径的其余部分由脚本自动构建.

无论如何,我的文件名包含连字符,为了使其更加万无一失,我想在alt属性中允许空格,这些空格将被替换为src属性中的连字符.麻烦的是,.replace()命令似乎只对第一个匹配的字符起作用,所以如果我在alt属性中有三个单词来描述img,则第二个空格不会被替换而img路径会中断.

这是有问题的代码:

<div class="copy"><img alt="three word alt" /></div>

<script>
    $('div.copy').find('img').each(function() {
        $(this).attr('src','/images/'+$(this).attr('alt').replace(' ','-')+'.png');
    });
</script>
Run Code Online (Sandbox Code Playgroud)

最终结果应该是

<img src="/images/three-word-alt.png" alt="three word alt" />
Run Code Online (Sandbox Code Playgroud)

但相反它出来是这样的:

<img src="/images/three-word alt.png" alt="three word alt" />
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

Nic*_*ver 5

/g在这里使用,像这样:

$('div.copy').find('img').each(function() {
    $(this).attr('src','/images/'+$(this).attr('alt').replace(' '/g,'-')+'.png');
});
//or the regex version:
$('div.copy').find('img').each(function() {
    $(this).attr('src','/images/'+$(this).attr('alt').replace(/ /g,'-')+'.png');
});
Run Code Online (Sandbox Code Playgroud)

/g全局修饰符来匹配所有出现而不仅仅是第一个(默认)...与大多数其他语言相比,JavaScript在这方面的行为有点奇怪.