0

我有一个调用函数的 javaScript:

var combineddata = jQueryGetHtml();

功能是:

// Get ALL of the HTML using jQuery
var jQueryGetHtml = function()
{
    var htmlStartTag = function()
    {
        return $('html').contents();

        var attrs = $('html')[0].attributes;
        var result = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html';
        $.each(attrs, function() { 
            result += ' ' + this.name + '="' + this.value + '"';
        });
        result += '>';
        return result;
    }

    return htmlStartTag() + $('html').html() + '</html>';
}

这很好用,只是它去掉了内联 javascript,例如:

<script type="text/javascript">
var addthis_config = {"data_track_clickback":true, "ui_click":false};
</script>

另一个问题:这个 div

<div id="Pc8od0kc" class="reusable-block">
    <a href="http://www.addthis.com/bookmark.php?v=250&amp;username=somebody" class="addthis_button">
        <img width="125" height="16" style="border: 0pt none;" alt="Bookmark and Share" src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif">
    </a>
    <script type="text/javascript">var addthis_config = {"data_track_clickback":true, "ui_click":false};</script>
    <script src="http://s7.addthis.com/js/250/addthis_widget.js#username=claremontmc" type="text/javascript"></script>
</div>

变成

<div id="Pc8od0kc" class="reusable-block">
    <a class="addthis_button" href="http://www.addthis.com/bookmark.php?v=250&amp;username=somebody">
        <img src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif" alt="Bookmark and Share" style="border: 0pt none;" height="16" width="125">
    </a>
</div>
4

2 回答 2

1

html()getter 不会删除脚本内容。如果你没有得到<script>from html(),那是因为<script>在它被调用的时候 DOM 中没有标签。

如果您正在使用 setter 写入该元素html(value),然后再将其读回,那么将导致<script>s 被剥离。jQuery 故意<script>从输入中剥离标签(其中包括使用一些真正被误导的正则表达式黑客对传入标记所做的其他讨厌的事情),并尝试在插入时手动运行其中的代码。

这是因为如果您只是简单地写一个<script>to innerHTML,浏览器将不会执行该脚本。但是,如果您随后对生成的 DOM 节点进行 DOM 操作,浏览器有时会执行脚本,但在不同的时间,会导致不希望的跨浏览器不一致。

你的目标是什么,为什么你需要编写然后检索<script>元素?通过或写入<script>文档几乎从来都不是一个好主意。html()innerHTML

于 2010-10-09T00:52:46.710 回答
0

使用jQuery.getScript()获取脚本并在页面上执行它们。如果您不知道将要执行哪些脚本,而您只是获取 HTML 并依赖地执行这些脚本,那么您将面临巨大的设计问题。

于 2010-10-09T01:24:58.873 回答