Извлечь теги script из строки HTML
Или любые другие теги:)
например,
<head>
<title>page...</title>
<script> var a = 'abc'; </script>
<script src="foo.js" type="text/javascript"></script>
</head>
<body>
...
<script src="foo2.js"></script>
</body>
(эта строка является ответом от вызова ajax)
Я хочу получить массив с тремя строками:
-
<script> var a = 'abc'; </script>
-
<script src="foo.js" type="text/javascript"></script>
-
<script src="foo2.js"></script>
Как я могу это сделать?
Ответы
Ответ 1
Определить: outerHTML функция (взята из здесь)
jQuery.fn.outerHTML = function(s) {
return (s) ? this.before(s).remove() : jQuery("<p>").append(this.eq(0).clone()).html();
}
Затем предположим, что ваш ответ хранится в data
, который вы можете сделать:
$(data).filter("script").each( function(e) {
// do something with $(e).outerHTML()
} );
Ответ 2
Используйте регулярное выражение с шаблоном <script[^<]*</script>
.
Ответ 3
Вы можете попробовать что-то вроде:
function getScriptsAsText() {
var div = document.createElement('div');
var scripts = [];
var scriptNodes = document.getElementsByTagName('script');
for (var i=0, iLen=scriptNodes.length; i<iLen; i++) {
div.appendChild(scriptNodes[i].cloneNode(true));
scripts.push(div.innerHTML);
div.removeChild(div.firstChild);
}
return scripts;
}
Он возвращает массив текущих script элементов как текст, включая их начальный и конечный теги.
Вы также можете попробовать outerHTML, но это не так широко поддерживается.