Извлечение тегов скрипта из строки HTML - PullRequest
10 голосов
/ 14 ноября 2011

Или любые другие теги:)

например,

  <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)

Я хочу получить массив из 3 строк:

  1. <script> var a = 'abc'; </script>
  2. <script src="foo.js" type="text/javascript"></script>
  3. <script src="foo2.js"></script>

Как я могу это сделать?

Ответы [ 3 ]

6 голосов
/ 14 ноября 2011

Определить: функция externalHTML (взято из здесь )

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()
} );
1 голос
/ 14 ноября 2011

Вы можете попробовать что-то вроде:

 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;
 }

Возвращает массив текущих элементов скрипта в виде текста, включая их начальный и конечный теги.

Вы также можете попробовать externalHTML, но он не так широко поддерживается.

1 голос
/ 14 ноября 2011

Используйте регулярное выражение с шаблоном <script[^<]*</script>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...