2012-05-02 49 views
-3

我有一個字體,除了一個字符以外,它的效果很好:0幸運的是O是一個完美的替代品,所以我決定寫一點JQuery來刪除所有的零並用大寫字母O替換它們:JQuery:替換可見字符

$("body").html($("body").html().replace(/0/g,'O')); 

這個偉大的工程,直到我有它一個零頁面上的鏈接,例如:

<a href="http://92.21.52.108:9000">Our server</a> 

這被更改爲:

<a href="http://92.21.52.1O8:9OOO">Our server</a> 

我想我會嘗試使用$("body").text來代替,但這完全行不通。

鑑於我需要保持字體,我該如何解決這個特殊問題?

謝謝!

回答

3

使用JQuery來做到這一點是一個非常糟糕的主意。

要麼更新字體以改進'0',要麼使用不同的字體。

+0

爲什麼它是一個非常糟糕的主意,可我問?除了那個怪癖之外,它似乎在完美工作。謝謝。 –

+2

因爲有一個更好的方法來解決潛在的問題 - 字體。另外,我討厭在每個客戶端機器上查看您網站的所有'浪費'cpu週期。但認真的說 - 這不是解決這個問題的正確方法。 – psynnott

+0

任何字體編輯器的建議呢? :) –

1

這將工作,但我不知道,它是多麼的高性能。

​$(function() { 
    $('body *') 
     .contents() 
     .filter(function() { 
      return(this.nodeType === 3) 
     }) 
     .each(function() { 
      $(this).replaceWith($(this).text().replace(/0/g, 'O')) 
     }) 

})​ 

http://jsfiddle.net/nPfDC/

+0

感謝您的嘗試,但這根本不起作用。 –

+0

也許我從jsfiddle中錯誤地複製了它。再試一次 – HerrSerker

+0

問題是,它也取代了CSS:http://jsfiddle.net/d44MF/無論如何,我應該嘗試修復字體。 –

-1

竄克羅克福德,您可以使用非jQuery的步行者就像這樣:

var walk_the_DOM = function walk(node, func) { 
    func(node); 
    node = node.firstChild; 
    while (node) { 
     walk(node, func); 
     node = node.nextSibling; 
    } 
}; 

walk_the_DOM(document.body, function(node) { 
    if(node.nodeType == 3) { 
     node.data = node.data.replace(/0/g,'O') 
    } 
});​ 

演示在這裏:http://jsfiddle.net/b7PtN/