如何使用Javascript/jQuery将所有文本更改为美国化拼写?

cyej8jka  于 2022-12-22  发布在  jQuery
关注(0)|答案(1)|浏览(186)

我有两个网站,一个在英国,一个在美国,这两个网站在某些地方使用相同的文本,用英国的方式拼写--例如,“我专门从事优化工作”
是否有一个Javascript/JQuery包/解决方案可以自动将DOM中找到的所有英式拼写替换为美式拼写?例如,将上面的内容更改为“我擅长优化东西”
所以我想我可以循环遍历DOM元素并替换它们,例如

$('p').each(function() {
    var text = $(this).text();
    text = text.replace('ise', 'ize');
    $(this).text(text); 
});

但这并不是在所有情况下都有效,例如“wise”不应该改为“wize”。有没有已知的正则表达式或类似的解决方案来解决这个问题?

2w2cym1i

2w2cym1i1#

下面是一个解决方案,它使用一个翻译表和一些jQuery以及原生JavaScript来遍历DOM并更改文本,不包括标签属性。点击切换到美国拼写按钮:

const translations = {
  colour: 'color',
  colours: 'colors',
  Colour: 'Color',
  Colours: 'Colors',
  optimising: 'optimizing',
  specialise: 'specialize'
};
const regex = new RegExp('\\b(' + Object.keys(translations).join('|') + ')\\b', 'g');
console.log('regex', regex);
$(document).ready(function() {
  $('.switchSpelling button').click(function() {
    $('#mainContent *').contents().each(function() {
      if(this.nodeType == 3) {
        this.nodeValue = this.nodeValue.replace(regex, m => {
          return translations[m];
        });
      }
    });
  })
});
.switchSpelling {
  float: right;
  margin-right: 70px;
}
.grayBackgroundColour {
  background-color: #f0f0f0;
  padding: 3px 10px;
}
.yellowBackgroundColour {
  background-color: #fffff0;
  padding: 3px 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="mainContent">
<div class="switchSpelling">
<button>Switch to USA Spelling</button>
</div>
<h1>The history of Colour</h1>
<div class="grayBackgroundColour">
<h2>Colours in Renaissance</h2>
<p>We specialise in optimising and restoring colours</p>
</div>
<div class="yellowBackgroundColour">
<h2>Colours in Cubism</h2>
<p>We specialise in optimising and restoring colours</p>
</div>
</div>

相关问题