将脚本内容作为文本获取

时间:2012-02-17 19:06:41

标签: javascript jquery

我想用jquery打印脚本标签的内容吗?

的index.html

<script type="text/javascript">

    function sendRequest(uri, handler)
    {


    }
</script>

代码

alert($("script")[0].???);

结果

function sendRequest(uri, handler)
{


}

6 个答案:

答案 0 :(得分:19)

只需为您的脚本标记添加一个ID:

<div></div>
<script id='script' type='text/javascript'>
    $('div').html($('#script').html());
</script>
​

http://jsfiddle.net/UBw44/

答案 1 :(得分:18)

您可以使用原生Javascript执行此操作!

这将打印文档中第一个脚本的内容:

strcpy()

这将打印具有id =&gt;的脚本的内容&#34;的MyScript&#34;:

alert(document.getElementsByTagName("script")[0].innerHTML);

答案 2 :(得分:8)

试试这个:

console.log(($("script")[0]).innerHTML);

答案 3 :(得分:0)

打印内部脚本:

var isIE = !document.currentScript;

function renderPRE( script, codeScriptName ){
  if (isIE) return;
  
  var jsCode = script.innerHTML.trim();
  // escape angled brackets between two _ESCAPE_START_ and _ESCAPE_END_ comments
  let textsToEscape = jsCode.match(new RegExp("// _ESCAPE_START_([^]*?)// _ESCAPE_END_", 'mg'));
  if (textsToEscape) {
    textsToEscape.forEach(textToEscape => {
      jsCode = jsCode.replace(textToEscape, textToEscape.replace(/</g, "&lt")
        .replace(/>/g, "&gt")
        .replace("// _ESCAPE_START_", "")
        .replace("// _ESCAPE_END_", "")
        .trim());
    });
  }
  script.insertAdjacentHTML('afterend', "<pre class='language-js'><code>" + jsCode + "</code></pre>");
}
<script>
// print this script:

let localScript = document.currentScript;

setTimeout(function(){
  renderPRE(localScript)
}, 1000);
</script>


使用XHR(AJAX)打印外部脚本:

var src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js";

// Exmaple from: 
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest
function reqListener(){
  console.log( this.responseText );
}

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", src);
oReq.send();


*已弃用*:不使用XHR(AKA Ajax)

如果要打印外部脚本的内容(文件必须驻留在相同域中),则可以使用具有rel="import"属性的<link>标签,然后将脚本的源代码置于href属性中。这是此网站的有效示例:

<!DOCTYPE html>
<html lang="en">
    <head>
       ...
       <link rel="import" href="autobiographical-number.js">
       ...
    </head>
    <body>
        <script>
            var importedScriptElm = document.querySelector('link[rel="import"]'),
                scriptText = scriptText.import.body.innerHTML;

            document.currentScript.insertAdjacentHTML('afterend', "<pre>" + scriptText + "</pre>");
        </script>
    </body>
</html>

这仍然是实验性技术,是 web组件的一部分。进一步了解MDN

答案 4 :(得分:0)

您可以使用document.getElementsByTagName(“ script”)获取具有所有脚本的HTMLCollection,然后对其进行迭代以获取每个脚本的文本。显然,您只能获取本地javascript的文本。对于外部脚本(src =),必须使用ajax调用来获取文本。 使用jQuery这样的东西:

var scripts=document.getElementsByTagName("script");
for(var i=0; i<scripts.length; i++){
    script_text=scripts[i].text;
    if(script_text.trim()!==""){ // local script text 
        // so something with script_text ...
    }
    else{ // external script get with src=...
        $.when($.get(scripts[i].src))
            .done(function(script_text) {
              // so something with script_text ...
            });         
    }
}

答案 5 :(得分:0)

访问当前脚本的正确方法是document.scripts(类似于HTMLCollection的数组),最后一个元素始终是当前脚本,因为它们是按解析顺序进行处理并添加到该列表中的并执行。

var len = document.scripts.length;
console.log(document.scripts[len - 1].innerHTML);

唯一的警告是您不能使用任何会延迟代码执行的setTimeout或事件处理程序(因为可以在执行代码时解析并添加html中的下一个脚本)。