2008-12-07 8 views
0

J'ai une page HTML avec laquelle je veux faire un remplacement côté client en utilisant Javascript. Les valeurs que je voudrais remplacer sont dans un tableau comme ceci:Comment implémenter le remplacement côté client avec Javascript?

var searchFor = new Object(); 
var replaceWith = new Object(); 
searchFor = 
[ 
    "quick", 
    "brown", 
    "fox", 
]; 

replaceWith = 
[ 
    "nimble", 
    "black", 
    "cat", 
]; 

Ainsi, chaque instance de « brun » devrait être remplacé par « noir ». Quelle est la meilleure façon de faire cela qui fonctionne à travers le navigateur?

+0

Je me rends compte que vous demandez l'aide de « clés du tableau », mais vos mix code de configuration objets et littéraux de tableau. Est-ce juste la terminologie PHP pour les "tableaux associatifs", qui seraient des objets en JavaScript, ou voulez-vous vraiment utiliser des tableaux normaux, qui seraient indexés par nombre, pas avec des "clés"? – Tomalak

+0

Ouais, j'ai plus de compétences en PHP et je mélange souvent les deux (ils partagent des éléments communs, après tout). – different

+0

Non, ça fonctionne. Je vous remercie. :) – different

Répondre

2

Je récursivité dans tous les nœuds du DOM à l'aide traversal par défaut W3C DOM, choisir les nœuds de texte uniquement pour le traitement:

// replacer object, containing strings and their replacements 
var replacer = { 
    "quick": "nimble", 
    "brown": "black", 
    "fox": "cat" 
}; 

// prepare regex cache 
var replacer_re = (function() 
    { 
    var replacer_re = {}; 
    // certain characters are special to regex, they must be escaped 
    var re_specials = /[][/.*+?|(){}\\\\]/g; 
    var word; 
    for (word in replacer) 
    { 
     var escaped_word = word.replace(re_specials, "\\\1"); 
     // add \b word boundary anchors to do whole-word replacing only 
     replacer_re[word] = new RegExp("\\b" + escaped_word + "\\b", "g"); 
    } 
    return replacer_re; 
    } 
)(); 

// replace function 
function ReplaceText(text) 
{ 
    var word; 
    for (word in replacer) 
    text = text.replace(replacer_re[word], replacer[word]); 
    return text; 
} 

// DOM recursing function 
function ReplaceTextRecursive(element) 
{ 
    if (element.childNodes) 
    { 
    var children = element.childNodes; 
    for (var i = children.length - 1; i >= 0; i--) 
     ReplaceTextRecursive(children[i]); 
    }  

    if (element.nodeType == 3) // 3 == TEXT_NODE 
    element.nodeValue = ReplaceText(element.nodeValue); 
} 

// test it 
function test() 
{ 
    ReplaceTextRecursive(document) 
} 
+0

Un tableau associatif a beaucoup plus de sens. Merci beaucoup, vous êtes une star. :) – different

Questions connexes