je charge du HTML via Ajax avec ce format:jQuery: Parse/HTML sans Manipulez scripts d'exécution
je dois itérer sur chaque div dans la réponse et la poignée séparément. Avoir une chaîne distincte pour le contenu HTML de chaque div mappé à l'id répondrait à mes exigences. Cependant, les divs peuvent contenir des tags de script, que je dois conserver mais pas exécuter (ils seront exécutés plus tard quand je collerai le HTML dans le document, donc l'exécution pendant l'analyse serait mauvaise). Ma première pensée était de faire quelque chose comme ceci:
// data being the result from $.get
var clean = data.replace(/<script.*?</script>/,function() {
// insert some unique token, save the tag, put it back while I'm processing
});
$('<div/>').html(clean).children().each(/* ... process here ... */);
Mais je crains que certains dev va venir stupide et mettre quelque chose comme ça dans l'un des divs:
<script> var foo = '</script>'; // ... </script>
qui visserait tout ça. Sans parler du fait que tout cela ressemble à un hack. Est-ce que quelqu'un sait un meilleur moyen?
EDIT: Voici la solution que je suis venu avec:
var divSplitRegex = /(?:^|<\/div>)\s*<div\s+id="prefix-(.+?)">/g,
idReplacement = preDelimeter+'$1'+postDelimeter;
var r = data.replace(<\/div>\s*$/,'').
replace(divSplitRegex,idReplacement).split(preDelimeter);
$.each(r,function() {
var content;
if(this) {
callback.apply(null,this.split(postDelimeter));
}
});
Où preDelimiter et postDelimeter sont des chaînes simplement uniques comme « ### Je dois être idiot pour intégrer cette chaîne dans mon le contenu est non échappé parce qu'il casserait tout ### ', et le callback est une fonction qui attend l'ID div et le contenu div Cela ne fonctionne que parce que je sais que les divs auront seulement un identifiant id et l'identifiant aura un préfixe spécial Je suppose que quelqu'un pourrait mettre un div dans leur contenu avec un identifiant ayant le même préfixe et il ferait des foutaises aussi. J'adore cette solution. Quelqu'un en at-il un meilleur?
Je suppose que cela signifie que ma première solution sera sûre. Je ne l'aime pas, mais ça marche. – noah