我正在尝试在页面上搜索所有数字,并有选择地仅在数字上增加字体大小。因此,对于标题“超过$ 3000”,只有“ 3000”应增加大小。到目前为止,我已经尝试过此操作,并且在相同主题上进行了其他一些排列,但没有骰子。有任何想法吗?

$(function () {

   function replaceText(i,el) {
      var regex = /(\d+)/g;
      if (el.nodeType === 3) {
          if (regex.test(el.data)) {
              $(el).css('font-size', '30px');
          }
      } else {
          $(el).css('font-size', '30px');
      }
    }

    $('body').each( replaceText );

});

最佳答案

您可以使用的是.html() method。您可以作为第二个参数访问函数中元素的HTML。但是,将body用作选择器非常危险-缩小选择器范围也将极大地提高性能。

错误:使用.html()极具风险,因为您最终可能会替换HTML元素/标记中的数字属性。更好的解决方案是获取<body>元素的所有子元素中的文本节点(尽管将选择器更改为更具体的选择将有所帮助),using a previously published method将起作用。

该代码包含两个循环:


第一个循环遍历<body>元素的所有后代,即使用$('body').find('*').each(function() {...});-这非常昂贵。您应该缩小选择器的范围,以获得更好的性能。
使用.contents()检索每个子项的内容,然后使用.filter()根据节点类型进行过滤后,发生第二个循环。这为我们提供了body元素中的所有文本节点。我们只需将这些文本节点替换为您定义的正则表达式即可。


p / s:最好将样式与JS代码分开,除非必须根据上下文进行特定设置。否则,只需声明一个适当的类并按您希望的方式对其进行样式设置:



$('body').find('*').each(function() {
  $(this).contents().filter(function () {
    return this.nodeType === 3;
  }).each(function () {
    $(this).replaceWith($(this).text().replace(/(\d+)/g, '<span class="number">$1</span>'));
  });
});

span.number {
  font-size: 30px;
  color: red;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Over $2000.</p>
<div><p>Over $3000.</p></div>

关于javascript - 增加页面上所有数字的字体大小(JavaScript,JQuery,DOM操作),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32554585/

10-16 20:19