代码之家  ›  专栏  ›  技术社区  ›  Mechlar

保存vml和css标记

  •  2
  • Mechlar  · 技术社区  · 15 年前

    我正在使用 DD_roundies 在Internet Explorer中生成圆角。包含圆角元素的页面经常被加载,Roundies脚本必须多次运行以圆角和修复PNG。这要花很多时间。该脚本生成一些放置在目标元素中的VML元素,以及一些注入到块中的CSS。

    我想保存vml和css以便在加载页面时重用,这样我就不必每次都运行脚本。目标元素已经被保存在数据库中,并在加载时通过Java重新插入到DOM中。

    我做了一个测试页,运行完Roundies脚本后,我将获取元素的HTML,包括vml、XML名称空间和css。我在IE中获取块的innerhtml时遇到了一些问题,但是我可以使用IE开发人员工具来获取它,这样我就可以测试它了。在得到不同的片段后,我把它们放在一个单独的HTML文件中,看它们是否能正确呈现。我的测试不起作用。

    以下是第一个测试页:

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js" type="text/javascript"></script>
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/base/jquery-ui.css" type="text/css" media="all" />
    <script type="text/javascript">
    $(function(){
       DD_roundies.addRule('#block_1', '20px 20px 0 0', true);
       DD_roundies.addRule('#block_2', '0 20px 20px 0', true);
       DD_roundies.addRule('#block_3', '0 0 20px 20px', true);
       DD_roundies.addRule('#block_4', '20px 0 0 20px', true);
       $('#getContent').click(function(){
          var allHTML = $('#allContent').html();
          $('#captureContent').text(allHTML).val(allHTML);
       });
       $('#getStyles').click(function(){
          var allStyles = $('#allStyles').html();
          $('#captureStyles').text(allStyles).val(allStyles);
       });
    });
    </script>
    <div id="allContent">
    <script src="http://www.dillerdesign.com/experiment/DD_roundies/DD_roundies_0.0.2a-min.js" type="text/javascript"></script>
    <style id="allStyles" type="text/css">
       .blocks{
          width: 150px;
          height: 100px;
          margin: 5px;
          border: 3px solid #999;
       }
    </style>
    <div id="block_1" class="blocks"></div>
    <div id="block_2" class="blocks"></div>
    <div id="block_3" class="blocks"></div>
    <div id="block_4" class="blocks"></div>
    </div>
    <button id="getStyles">Get Styles</button>
    <textarea id="captureStyles"></textarea>
    <br />
    <button id="getContent">Get Content</button>
    <textarea id="captureContent"></textarea>
    

    感谢您的帮助!

    1 回复  |  直到 14 年前
        1
  •  1
  •   Mark McLaren    14 年前

    第一个问题是,你会得到不同的CSS,这取决于你使用的浏览器(你可能很明显!).css3圆角标准尚未稳定,所需的CSS在火狐、基于Webkit的浏览器(Safari、Chrome)和Opera上将有所不同。因此,您需要使用不同的开发人员工具来获取CSS/VML。

    在火狐中使用Firebug,你可以获得:

    #block_1 {
      -moz-border-radius:20px 20px 0 0;
    }
    

    使用Chrome的开发工具,您可以获得:

    #block_1 {
      border-bottom-left-radius: 0px 0px;
      border-bottom-right-radius: 0px 0px;
      border-top-left-radius: 20px 20px;
      border-top-right-radius: 20px 20px;
    }
    

    如果我将您的示例简化为:

    <script src="http://www.dillerdesign.com/experiment/DD_roundies/DD_roundies_0.0.2a-min.js" type="text/javascript"></script>
    <style id="allStyles" type="text/css">
       .blocks{
          width: 150px;
          height: 100px;
          margin: 5px;
          border: 3px solid #999;
       }
    </style>
    <div id="block_1" class="blocks"></div>
    <script type="text/javascript">
    DD_roundies.addRule('#block_1', '20px 20px 0 0', true);
    </script>
    

    然后IE8开发工具给了我:

    <HTML XMLNS:DD_roundies = "urn:schemas-microsoft-com:vml"><HEAD>
    <STYLE>DD_roundies\:* {
        BEHAVIOR: url(#default#VML)
    }
    #block_1 {
        ; BEHAVIOR: expression(DD_roundies.roundify.call(this, [20,20,0,0]))
    }
    </STYLE>
    
    <STYLE id=allStyles type=text/css>.blocks {
        BORDER-BOTTOM: #999 3px solid; BORDER-LEFT: #999 3px solid; MARGIN: 5px; WIDTH: 150px; HEIGHT: 100px; BORDER-TOP: #999 3px solid; BORDER-RIGHT: #999 3px solid
    }
    </STYLE>
    </HEAD>
    <BODY style="POSITION: relative; ZOOM: 100%">
    <ignore style="Z-INDEX: 0; WIDTH: 150px; HEIGHT: 100px; TOP: 15px; LEFT: 15px">
    <DD_roundies:shape style="Z-INDEX: 0; POSITION: absolute; WIDTH: 150px; HEIGHT: 100px; TOP: 0px; LEFT: 0px" coordsize = "300,200" coordorigin = "1,1" filled = "f" fillcolor = "black" stroked = "f" path = " m6,40 l6,194 qy6,194 l294,194 qx294,194 l294,40 qy260,6 l40,6 qx6,40 e"><DD_roundies:fill></DD_roundies:fill></DD_roundies:shape><DD_roundies:shape style="Z-INDEX: 0; POSITION: absolute; WIDTH: 150px; HEIGHT: 100px; TOP: 0px; LEFT: 0px" coordsize = "150,100" coordorigin = "1,1" filled = "f" fillcolor = "none" stroked = "f" path = " m3,20 qy20,3 l131,3 qx148,20 l148,98 qy148,98 l3,98 qx3,98 l3,20 e"><DD_roundies:fill type = "tile"></DD_roundies:fill></DD_roundies:shape><DD_roundies:shape style="Z-INDEX: 0; POSITION: absolute; WIDTH: 150px; HEIGHT: 100px; TOP: 0px; LEFT: 0px" coordsize = "300,200" coordorigin = "1,1" fillcolor = "#999" stroked = "f" path = " m0,40 qy40,0 l260,0 qx300,40 l300,200 qy300,200 l0,200 qx0,200 l0,40 m6,40 l6,194 qy6,194 l294,194 qx294,194 l294,40 qy260,6 l40,6 qx6,40 e"><DD_roundies:fill></DD_roundies:fill></DD_roundies:shape></ignore>
    <DIV style="POSITION: relative; ZOOM: 1; BEHAVIOR: none" id=block_1 class=blocks isImg="false"></DIV>
    </BODY>
    </HTML>
    

    现在的工作是重新组合所有不同的CSS/VML开发人员工具转储到一个单一的HTML文件,希望不再需要dd_Roundies了!或者,你也可以直接信任dd_Roundies来完成它的工作。就个人而言,我总是处于尝试更具挑战性的任务的危险之中,而简单的任务会使工作做得更好!