Javascript 操纵DOM元素以提取一些节点并删除其他节点

Javascript 操纵DOM元素以提取一些节点并删除其他节点,javascript,jquery,dom,Javascript,Jquery,Dom,我需要操作HTML代码。具体来说,用户应该能够复制/粘贴代码,以便在文本区域中创建AddThis按钮,我想操作粘贴的代码 典型的AddThis按钮如下所示: <!-- AddThis Button BEGIN --> <div class="addthis_toolbox addthis_default_style "> <a class="addthis_button_facebook_like" fb:like:layout="button_count">

我需要操作HTML代码。具体来说,用户应该能够复制/粘贴代码,以便在文本区域中创建AddThis按钮,我想操作粘贴的代码

典型的AddThis按钮如下所示:

<!-- AddThis Button BEGIN -->
<div class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
<a class="addthis_button_tweet"></a>
<a class="addthis_counter addthis_pill_style"></a>
</div>
<script type="text/javascript">var addthis_config = {"data_track_clickback":true};</script>
<script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-123456798"></script>
<!-- AddThis Button END -->

var addthis_config={“数据跟踪”点击返回:true};
它包括开始和结束注释、一个div和/或一些链接,然后是两个脚本:一个配置设置和一个对其库的调用

问题是,我们需要在页面上多次调用它;所以,如果每次我想放置AddThis按钮时都放上这个,我担心至少有些浏览器会有奇怪的行为,如果它能工作的话

所以,我想提取config设置和lib调用,这样我就可以只调用它们一次,然后提取按钮config,这样我就可以在页面上放置任意多次

我已经这样做了:

    var codeAT = $(this).val();
    if (codeAT.indexOf("AddThis Button BEGIN") >= 0) {
        codeAT = codeAT.replace("&lt;", "<");
        codeAT = codeAT.replace("&gt;", ">");

        codeAT = $(codeAT);

        // extract the call to the config var and the lib
        var scriptConfig = "";
        var scriptSRC = "";
        codeAT.each(function() {
            if ($(this).attr("nodeName") == "SCRIPT") {
                if ($(this).attr("src") && $(this).attr("src") != "") {
                    scriptSRC = $(this).attr("src");
                } else {
                    scriptConfig = $(this).text();
                }
            }
        });

        // extract the addthis identifier
        scriptSRC = scriptSRC.split("=")[1];
    }
var codeAT=$(this.val();
if(codeAT.indexOf(“添加此按钮开始”)>=0){
codeAT=codeAT.replace(“,”);
codeAT=$(codeAT);
//提取对配置变量和库的调用
var scriptConfig=“”;
var scriptSRC=“”;
codeAT.each(函数(){
if($(this.attr(“nodeName”)=“SCRIPT”){
if($(this.attr(“src”)和&$(this.attr(“src”)!=“”){
scriptSRC=$(this.attr(“src”);
}否则{
scriptConfig=$(this.text();
}
}
});
//提取addthis标识符的地址
scriptSRC=scriptSRC.split(“=”[1];
}
现在,我可以使用vars scriptConfig(带有
var addthis\u config={“data\u track\u clickback”:true};
)和scriptSRC(带有
ra-123456789
),它们的值是正确的

我现在想要的是原始代码(在两个注释之间),没有注释,也没有脚本标记

为了删除标记,我尝试使用
codeAT.remove($(this))
,但它崩溃了(关于c.replace不是一个函数)

为了找回代码,我尝试了
codeAT.html()
,但它只得到标签。

而不是.each(),我会:

//删除标记并获取所需信息
var scriptSRC=$('script[src]',codeAT.remove().attr('src');
var scriptConfig=$('script:not([src]),codeAT.remove().text();
//获取代码(作为字符串)
var code=$('').append(codeAT.remove().html();

嗯,值的检索不起作用:$('script[src]',codeAT)返回长度为0的值。这很奇怪,因为remove()可以工作。好吧,我将使用我的方法来检索src和脚本位,并使用您的方法来删除标记。它似乎起作用了。谢谢
//remove <script> tags and get required info
var scriptSRC = $('script[src]', codeAT).remove().attr('src');
var scriptConfig = $('script:not([src])', codeAT).remove().text();

//get the code (as string)
var code = $('<div>').append(codeAT).remove().html();