【问题标题】:How to Invoke a Javascript function on the content of a div?如何在 div 的内容上调用 Javascript 函数?
【发布时间】:2021-01-06 10:40:45
【问题描述】:

我正在开发一个 WordPress 页面,需要调用 javascript 函数(如下所示)将文本转换为标题大小写或句子大小写。我从以前的帖子中找到了一些我想使用的脚本。但是,我不知道如何在 DIV 或段落中调用它。

这是我想使用的脚本。欢迎任何帮助改进此脚本。

PS:我不想使用 CSS 方法来转换文本。

String.prototype.toTitleCase = function() {
  var i, j, str, lowers, uppers;
  str = this.replace(/([^\W_]+[^\s-]*) */g, function(txt) {
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
  });

  // Certain minor words should be left lowercase unless 
  // they are the first or last words in the string
  lowers = ['A', 'An', 'The', 'And', 'But', 'Or', 'For', 'Nor', 'As', 'At',
    'By', 'For', 'From', 'In', 'Into', 'Near', 'Of', 'On', 'Onto', 'To', 'With'
  ];
  for (i = 0, j = lowers.length; i < j; i++)
    str = str.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'),
      function(txt) {
        return txt.toLowerCase();
      });

  // Certain words such as initialisms or acronyms should be left uppercase
  uppers = ['Id', 'Tv'];
  for (i = 0, j = uppers.length; i < j; i++)
    str = str.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'),
      uppers[i].toUpperCase());

  return str;
}

【问题讨论】:

  • JavaScript 不能“在 DIV 内”运行。您在这里完全混合了概念。
  • " 我不想使用 CSS 方法来转换文本。" - 为什么不呢?
  • 嗨,我的错,因为没有澄清我的问题。我想要的是使用“类”或“ID”调用/运行该函数。希望澄清。
  • 我不想使用 CSS,因为它不处理连词和介词。

标签: javascript html jquery wordpress string


【解决方案1】:

要运行该函数,您需要检索所有目标元素,在下面的示例中,我使用了div 元素,但一个类或任何其他有效的选择器都可以工作,并且您需要从那里调用toTitleCase() 字符串原型关于每个元素的文本内容。它可能看起来像这样:

document.querySelectorAll('div').forEach(el => el.textContent = el.textContent.toTitleCase());

这是一个完整的工作示例:

String.prototype.toTitleCase = function() {
  var i, j, str, lowers, uppers;
  str = this.replace(/([^\W_]+[^\s-]*) */g, function(txt) {
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
  });

  // Certain minor words should be left lowercase unless 
  // they are the first or last words in the string
  lowers = ['A', 'An', 'The', 'And', 'But', 'Or', 'For', 'Nor', 'As', 'At',
    'By', 'For', 'From', 'In', 'Into', 'Near', 'Of', 'On', 'Onto', 'To', 'With'
  ];
  for (i = 0, j = lowers.length; i < j; i++)
    str = str.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'),
      function(txt) {
        return txt.toLowerCase();
      });

  // Certain words such as initialisms or acronyms should be left uppercase
  uppers = ['Id', 'Tv'];
  for (i = 0, j = uppers.length; i < j; i++)
    str = str.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'),
      uppers[i].toUpperCase());

  return str;
}

document.querySelectorAll('.title').forEach(el => el.textContent = el.textContent.toTitleCase());
<h3 class="title">This is an example of title case</h3>
<p>This is paragraph text and will not be changed.</p>

【讨论】:

  • Roy 一个简单的问题,是否可以在此脚本中包含将文本转换为句子大小写的功能?请指教。
  • 这是可能的,但 CSS text-transform: capitalize 应该注意这一点,除非您有特殊用例。
  • 是的,罗伊,有一个特殊用途。我希望它处理名词、专有名词等......类似于我发布的标题大小写代码
  • 在这种情况下,toTitleCase() 函数中使用的模式可以在那里应用,只要您有一个详尽的列表,列出要保留大写的各种名词。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
相关资源
最近更新 更多