【问题标题】:Import CSS styles from HTML snippet从 HTML 片段导入 CSS 样式
【发布时间】:2013-06-26 05:14:29
【问题描述】:

我正在构建的网页上使用动态加载的 HTML 内容。我想要的是有一个带有 sn-ps 的 HTML 文件列表,这些文件将使用 javascript/jquery 和 ajax 请求动态导入到我的网页中。这将允许我例如将多个博客文章存储为单独的文件,并动态构建一个包含多个文章的页面。

下面是一个示例 sn-p,只有一个标题和一个小表格:

CSS:

#swimTimes2{
    background-color: #eee;
}

HTML 源代码:

<div id="itemContainer">
    <div id='swimTimes2' class='item'>
        <h1> Swim Times </h1>
        <table>
            <tr class="tableHead">
                <td>Weekdays</td><td>Weekends</td><td>Holidays</td></tr>
            <tr>
                <td>7:00am-9:00am</td><td>10:30am-8:00pm</td><td>11:00am-4:00pm</td></tr>
            <tr>
                <td>11:00am-2:00pm</td></tr>
            <tr>
                <td>4:00pm-10:30pm</td></tr>

        </table>

    </div>
</div>

我发现通过使用$.get(),我可以加载上面我的sn-p文件的内容,然后使用jquery在它中搜索我想要的html sn-p,在这种情况下是#itemContainer的内容。

JAVASCRIPT

$(document).ready( function(){
    loadContent('content/content_1.html');
});


function loadContent(fileName){

    $.get(fileName, function(data){

        var htmlContents = $(data).find("#itemContainer").children('.item').html();
        var id = $(data).find("#itemContainer").children('.item').attr('id');
        $('#content').append($('<div class="item" />').attr('id', id).html(htmlContents));

        var styleEl = $(data).find("style");
        $('head').append(styleEl);

    });
}

所以我的$.get() 处理程序函数的前 3 行工作 - 我能够导入 sn-p 并将其放在我的 html 页面上。现在,我还想将 sn-p 中的 css 样式导入到我的主页中 - 在这个例子中,我给我的项目一个灰色背景,这是一个它不会从我的主页 html 页面获得的属性。

我遇到的问题是,虽然我知道我的 sn-p 中的样式元素正在导入到我的主页中,但它包含的 css 规则并未应用于导入的 html。我错过了什么?

【问题讨论】:

  • 您如何知道您导入的样式在正确的位置?当您检查页面代码时,它们会出现吗?
  • 导入的页面是否在ifram中?否则,您可能会遇到两个&lt;html&gt;&lt;head&gt;&lt;body&gt; 标签的问题。
  • @Ghillied 我没有使用 i-frame。我将 #itemContainer 的内容作为字符串并将其解释为 jquery 元素,然后将其附加到主页上的 div 中。
  • @MarcAudet 正如你所说,我知道它们是通过在 Firefox 中使用“检查元素(Q)”来显示的 - 它显示为头部中的第二个 &lt;style&gt; 项目

标签: javascript html css html-parsing


【解决方案1】:

您可以在jQuery API 上执行与第二个示例类似的操作

var styleProps = $(this).css( ["width", "height", "color", "background-color"] );
$.each( styleProps, function( prop, value ) {
  html.push( prop + ": " + value );
});

$( "#result" ).html( html.join( "<br>" ) );

唯一的缺点是你必须在.css 中列出你想要的属性。但是,如果您放置所有可能的属性,它可能仍然有效,因为没有什么是真正的 null,除非该值被指定为 ''

【讨论】:

  • 我假设您还必须为 sn-p 中的每个元素执行此操作,对吧?
  • 你可以使用循环来遍历它们,但我相信是这样
  • 好的,我试过了,但我认为它不起作用,因为浏览器实际上并未呈现 html,只是使用 Jquery 进行了探索,因此不会解释 CSS。像$('#swimTimes2').css(["background"]); 这样的命令返回({'background-color':"transparent"}),这意味着 background-color 语句永远不会应用于 html 元素。不过,这让我想到,可以通过选择器解析 css 规则并单独应用它们。
  • 是的,但是您可以使用.css 以及使用$("#swimTimes2").css({'background' : 'grey', 'height': '50px'}); 格式更改对象的css。这意味着您可以在.each 循环中创建一个数组来存储每个css 属性(使用this 之类的标识符)并使用.css 格式将其放到另一个元素上$("#swimTimes2").css({'background' : array["background"], 'height': array["height"]});
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 2017-11-21
相关资源
最近更新 更多