所以我通过
jquery的ajax方法获取数据.检索到的数据如下所示:
- <html>
- <head>
- <style>
- body {
- color: red;
- font-weight: bold;
- }
- #someElement {
- color: blue;
- padding: 1em
- }
- </style>
- </head>
- <body>
- <div id="header">Super</div>
- <p>blah blah blah</p>
- <div id="footer">Stuff</div>
- </body>
- </html>
如何提取样式并将其插入到执行ajax调用的当前文档中?我尝试了各种各样的jquery咒语,但它没有去.我现在通过正则表达式提取css但不确定如何将css放入当前页面:
- $.ajax({
- url: '/template.html',success: function(data) {
- $("#header").html( $(data).find('#header').html() );
- $("#footer").html( $(data).find('#footer').html() );
- var re = /<style>((?:[\n\r]|.)+)<\/style>/m;
- var css = re.exec(data);
- // What to do with the css??
- return;
- }
- });
我最初有一个样式表,然后简单地执行以下操作:
- if($.browser.msie) {
- $('head').html(
- '<link rel="stylesheet" href="http://c.this/template.css" type="text/css" />'+
- $('head').html()
- );
- }
- else {
- $('head').prepend('<link rel="stylesheet" href="http://c.this/template.css" type="text/css" />');
- }
这工作除了在IE8中它会导致一些问题.
解决方法
您可以使用.filter()来查找< style />而不是使用正则表达式. tag,从那里只需使用document.getElementsByTagName(“head”)[0]来附加HTMLStyleElement
- $.ajax({
- type: 'POST',url: "/echo/html/",data: {
- html: postHtml
- },success: function(data) {
- var style = $(data).filter("style").get(0);
- document.getElementsByTagName("head")[0].appendChild(style);
- $("#header").html($(data).filter('#header').html());
- $("#footer").html($(data).filter('#footer').html());
- }
- });
在IE8 / 9,chrome,firefox上测试过