jquery - 获取字符串中 <body> </body> 的内容

标签 jquery html ajax

我想做以下事情。

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

    event.preventDefault();

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

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

    });

});

我希望所有超链接的行为都能进行 ajax 调用并检索 html。

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

如何只抓取 <body> </body> 中的内容? ajax 响应的标记,以便我可以 替换现有 html 中正文的内容。

编辑:<body>开始标签不会总是 <body>它有时可能有一个类,例如

<body class="class1 class2">

最佳答案

如果我没理解错的话,请使用正则表达式获取 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 的时候干扰我!:-)

关于jquery - 获取字符串中 <body> </body> 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6195615/

相关文章:

html - Flexbox 文本环绕

javascript - HighCharts 不添加系列数据点

javascript - 让用户使用鼠标选择伪元素

javascript - 当 CSS 禁用滚动时使用 jQuery 滚动

javascript - 没有按钮的谷歌地理编码

html - 当视口(viewport)顶部有固定的分隔线时,Chrome滚动太多

javascript - CSS 背景图片不显示 IE8

javascript - HTML 和 jQuery 锚定

javascript - 使用jquery异步上传文件的操作

javascript - 对ajax返回的选择值添加jquery onchange效果