Извлечь теги 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("&lt;p&gt;").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, но это не так широко поддерживается.