从HTML字符串中提取脚本标记

时间:2011-11-13 23:34:20

标签: javascript jquery string

或任何其他标签:)

例如。

  <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>
  4. 我该怎么做?

3 个答案:

答案 0 :(得分:6)

定义:outerHTML函数(取自here

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 :(得分:1)

使用模式为<script[^<]*</script>的正则表达式。

答案 2 :(得分:1)

您可以尝试以下内容:

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

它返回当前脚本元素的数组作为文本,包括它们的开始和结束标记。

您也可以尝试使用outerHTML,但它并没有受到广泛支持。