Il n'y a qu'un seul moyen fiable de le faire: pas à pas à travers les DOM et la recherche d'un match chaque noeud de texte.
Cette fonction fera juste que:
function findTextNodeWithMatch(regex, context) {
context = context || document.documentElement;
var childNodes = context.childNodes,
retTextNodes = [],
i = -1, node;
while (node = childNodes[++i]) {
if (node.nodeType === 3) {
var m;
while (m = regex.exec(node.data)) {
retTextNodes.push({
node: node,
match: m
});
}
}
if (node.nodeType === 1 && node.nodeName.toLowerCase() !== 'script') {
retTextNodes = retTextNodes.concat(arguments.callee(regex, node));
}
}
return retTextNodes;
}
Utilisation:
var patternToMatch = /\[((?:\\\[|.)*)\]/g;
var matchingNodes = findTextNodeWithMatch(patternToMatch, $('.comment-body p')[0]);
for (var i = 0, len = matchingNodes.length; i < len; i++) {
// Loop through the matching nodes:
// Extract the string you want:
var theMatch = matchingNodes[i].match;
var myString = theMatch[1];
alert(myString);
// Replace the string within the node:
var theNode = matchingNodes[i].node;
theNode.parentNode.replaceChild(document.createTextNode(theNode.data.replace(patternToMatch, '')), theNode);
}
En utilisant innerHTML
est un élément n'est pas fiable car il peut contenir d'autres éléments et ces éléments peuvent avoir des attributs qui correspondent à ce que vous cherchez - vous ne voulez pas les enlever par erreur ...
La chaîne est-elle quelque part dans le document? – James
Keith: remplacez var wholeParagraph = $ ('. Comment-body p'); avec var wholeParagraph = $ ('. comment-body p'). text(); - Comme c'est le cas maintenant, vous allez simplement chercher la collection jQuery, pas le texte réel dans le paragraphe. –
@Paolo, cela fonctionnera mais si vous essayez d'exécuter des remplacements sur text() alors vous rencontrerez des problèmes s'il y a d'autres éléments dans le paragraphe. para.html (para.text(). replace ('[...]', '')); // Les éléments dans le paragraphe seront supprimés ... – James