小编典典

获取字符串中的内容

ajax

我要执行以下操作。

$("a").click(function (event) {

    event.preventDefault();

    $.get($(this).attr("href"), function(data) {

        $("html").html(data);

    });

});

我想要所有超链接的行为进行ajax调用并检索html。

不幸的是,您不能简单地用ajax响应中收到的html替换当前的html。

如何仅获取<body> </body>ajax响应的标记中的内容,以便 替换现有html中正文的内容。

编辑:<body>开始标记并不总是这样<body>,有时可能会有一个类,例如

<body class="class1 class2">


阅读 514

收藏
2020-07-26

共1个答案

小编典典

如果我对您的理解正确,请使用正则表达式在body标签之间获取内容。

$.get($(this).attr("href"), function(data) {
    var body=data.replace(/^.*?<body>(.*?)<\/body>.*?$/s,"$1");
    $("body").html(body);

});

编辑

根据您在下面的评论,这是一个更新,以匹配任何body标签,无论其属性如何:

$.get($(this).attr("href"), function(data) {
    var body=data.replace(/^.*?<body[^>]*>(.*?)<\/body>.*?$/i,"$1");
    $("body").html(body);

});

正则表达式为:

^               match starting at beginning of string

.*?             ignore zero or more characters (non-greedy)

<body[^>]*>     match literal '<body' 
                    followed by zero or more chars other than '>'
                    followed by literal '>'

(               start capture

  .*?           zero or more characters (non-greedy)

)               end capture

<\/body>        match literal '</body>'

.*?             ignore zero or more characters (non-greedy)

$               to end of string

添加“ i”开关以匹配大写和小写字母。

并且请忽略我对’s’开关的评论,在JavaScript中,默认情况下所有RegExp都已经是单行,要匹配多行模式,请添加’m’。(该死的Perl,在我写JavaScript时干扰了我!:-)

2020-07-26