テキストノードを見て、番号が折り返された更新されたコンテンツに置き換えることができます。
var regex = /(\d+)/,
replacement = '<span>$1</span>';
function replaceText(el) {
if (el.nodeType === 3) {
if (regex.test(el.data)) {
var temp_div = document.createElement('div');
temp_div.innerHTML = el.data.replace(regex, replacement);
var nodes = temp_div.childNodes;
while (nodes[0]) {
el.parentNode.insertBefore(nodes[0],el);
}
el.parentNode.removeChild(el);
}
} else if (el.nodeType === 1) {
for (var i = 0; i < el.childNodes.length; i++) {
replaceText(el.childNodes[i]);
}
}
}
replaceText(document.body);
例:http://jsfiddle.net/JVsM4/
これは、既存の要素、およびそれらに関連するjQueryのデータに損傷を行いません。
EDIT:あなたはそれを少しjQueryを使って少し短くすることができます:
var regex = /(\d+)/g,
replacement = '<span>$1</span>';
function replaceText(i,el) {
if (el.nodeType === 3) {
if (regex.test(el.data)) {
$(el).replaceWith(el.data.replace(regex, replacement));
}
} else {
$(el).contents().each(replaceText);
}
}
$('body').each(replaceText);
例:正規表現がg
グローバル修飾子が必要であることをhttp://jsfiddle.net/JVsM4/1/
注意を。
おそらく少し遅いので、DOMがかなり大きい場合は、非jQueryバージョンを使用します。
あなたの日付が正確な要素を知っていますか?たぶん正規表現を使って日付を見つけることができますか? – Marnix
+1興味深い質問 – leon