我需要jQuery来更改所有页面中的数字。例如,我想改变1比1,所以我试着这样说:JQuery更改所有元素文本
$("*").each(function(){
$(this).html( $(this).html().replace(1,"۱") );
})
但这种情况将会改变CSS规则和属性也。是否有任何技巧来逃避CSS和属性?
我需要jQuery来更改所有页面中的数字。例如,我想改变1比1,所以我试着这样说:JQuery更改所有元素文本
$("*").each(function(){
$(this).html( $(this).html().replace(1,"۱") );
})
但这种情况将会改变CSS规则和属性也。是否有任何技巧来逃避CSS和属性?
这不是一份工作,jQuery的自然融入。而不是让jQuery获取所有元素的扁平列表,递归遍历DOM树,搜索文本节点以执行替换。
function recursiveReplace(node) {
if (node.nodeType == 3) { // text node
node.nodeValue = node.nodeValue.replace("1", "۱");
} else if (node.nodeType == 1) { // element
$(node).contents().each(function() {
recursiveReplace(this);
});
}
}
recursiveReplace(document.body);
看到它在行动here。
如果你执行'else if ...',你可以省略'return'语句... – 2011-03-31 01:42:56
@Šime谢谢。习惯于在递归函数中包含一个“if-return”块。 – 2011-03-31 01:45:27
糟糕的是,ES5的'forEach'在NodeLists上不起作用。否则,我们可以完成'node.childNodes.forEach(...)'并从等式中完全删除jQuery。 – 2011-03-31 01:55:24
没有看到您的代码的实际例子很难提供一个很好的答案,但我会尽我所能。
这是我会做的。我想包你所有的页码与一个特定的ID,这样的标签...
<span class="pageNumber">1</span>
...
<span class="pageNumber">n</span>
然后这里是jQuery的...
你可以在递增值循环来计算页面,或其他任何你想要的!
希望帮助,
spryno724
绝对是最好的方法,如果你控制HTML的生成(只需在这些跨度上使用class而不是id)。 – 2011-03-31 01:45:01
出于好奇,为什么要使用类而不是ID? – 2011-03-31 01:55:39
,因为ID必须是唯一的;) – 2011-03-31 02:46:37
试试这个:
$("body *").each(function() {
if (this.childElementCount > 0) { return; }
$(this).text(function(i, v) { return v.replace('1','۱'); });
});
更新:没有工作...
为什么'each'?这应该做到:'$('*')。text(function(i,text){return text.replace(1,“1”);});' – 2011-03-31 01:09:12
@Felix'text()'重写破坏子元素:http://jsfiddle.net/GaHvH/ – 2011-03-31 01:33:36
@SimeVidas:对......昨天晚了;) – 2011-03-31 08:13:22