я загружаю некоторые HTML с помощью Ajax с этим форматом:JQuery: Разбираем/Манипулирование HTML без выполнения скриптов
мне нужно перебрать каждого DIV в ответ и обрабатывать отдельно. Наличие отдельной строки для содержимого HTML каждого div, сопоставленного с идентификатором, удовлетворяет моим требованиям. Тем не менее, divs может содержать теги скриптов, которые мне нужно сохранить, но не выполнить (они будут выполняться позже, когда я буду вставлять HTML в документ, поэтому выполнение во время разбора будет плохим). Моя первая мысль была сделать что-то вроде этого:
// 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 ... */);
Но я волнуюсь, что какой-то глупый DEV собирается прийти и поставить что-то подобное в одном из дивы:
<script> var foo = '</script>'; // ... </script>
Какой бы винт все это. Не говоря уже о том, что все начинается с взлома. Кто-нибудь знает лучший способ?
EDIT: Вот решение, которое я придумал:
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));
}
});
Где preDelimiter и postDelimeter только уникальные строки, как «### я должен был бы быть идиотом, чтобы вставить эту строку в моем content unescaped, потому что он сломал все ### ', а callback - функция, ожидающая идентификатор div и содержимое div. Это работает только потому, что я знаю, что divs будет иметь только атрибут id, а id будет иметь специальный префикс Я полагаю, кто-то мог бы добавить div в свой контент с идентификатором, имеющим тот же префикс, и он тоже повредил бы.
Итак, t люблю это решение. У кого-нибудь есть лучший?
Я предполагаю, что это означает, что мое первое решение будет безопасным. Мне это не нравится, но это работает. – noah