我正在尝试在页面上搜索所有数字,并有选择地仅在数字上增加字体大小。因此,对于标题“超过$ 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/