我想做以下事情。
$("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/