我要执行以下操作。
$("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>开始标记并不总是这样<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时干扰了我!:-)