用脚本创建的元素看起来不同

时间:2014-07-01 13:02:26

标签: javascript html css

我有div块,其中一组元素用fieldset标记分隔。 (我手动添加了它)。并且有一个功能可以通过脚本添加类似的组(按钮单击)。 似乎在脚本中,我以相同的方式设置了元素属性,但它看起来不同。 (元素之间的距离不相等。)  为什么会这样?什么原因?

我可以用css来纠正这个问题,但只有原因很有趣。

整个HTML代码

  <html>
  <head>
  <script type="text/javascript">

   function addGroup(){
     var parent=document.getElementById("myDiv");
     var fs=document.createElement("fieldSet");
     fs.style.borderRadius="7px"; 
     fs.style.height="45px";

     var l=document.createElement("legend");
     l.innerHTML="interval_0";
     l.style.color="darkgreen";
     l.style.fontStyle="italic";
     fs.appendChild(l);

     var d1= document.createElement("input");
     d1.type="date";
     d1.value='2014-05-01';
     fs.appendChild(d1);

     var d2= document.createElement("input");
     d2.type="date";
     d2.value='2014-05-22';
     fs.appendChild(d2);

     var txt= document.createElement("input");
     txt.type="text";
     txt.value='0';
     txt.size=12;
     txt.style.textAlign="right";
     fs.appendChild(txt);

     parent.appendChild(fs);
}

     </script>
     </head>
     <body>
       <input type="hidden" id="hd1" value="0"> </input>
       <button onclick="addGroup();"> AddGroup</button>
       <div id="myDiv" style="padding:7px;position:relative;margin-        top:15px;width:500px;height:500px;background-color:#ccbbcc;overflow-y:auto;border:1px red solid;border-radius:15px;">

        <fieldset style="border-radius:7px;height:45px;"><legend    style="color:darkgreen;font-style:italic;">Interval</legend> 
        <input type="date" value="2014-01-01"> <input type="date" value="2014-01-31">   <input type="text" size="12" value="0" style="text-align:right;"></input>
        </fieldset>
        </div>
        </body>
        </html> 

2 个答案:

答案 0 :(得分:1)

动态创建的元素不会在它们之间获得任何空间,它会动态添加到单行中,如下面的代码。

<label>From</label><input type="text" /><label>From</label><input type="text" />

您必须通过保证金来管理css空间。

答案 1 :(得分:0)

元素之间的空间不同。当您使用空白字符(空格,制表符或行结尾)编写HTML时,它将在元素之间打印并在输入之间创建边距。

但是当你创建元素并用javascript附加它们时,这些元素之间就不会有空格。您可以使用空格(http://www.w3schools.com/jsref/met_document_createtextnode.asp)创建文本节点,或在HTML标记中省略这些空格。

更好的是,通过调用相同的函数创建第一个组。删除初始fieldSet的html标记,并调用body的bodyGroup底部(文档准备好操作)

<html>
<head>
    <script type="text/javascript">

        function addGroup() {
            var parent = document.getElementById("myDiv");
            var fs = document.createElement("fieldSet");
            fs.style.borderRadius = "7px";
            fs.style.height = "45px";

            var l = document.createElement("legend");
            l.innerHTML = "interval_0";
            l.style.color = "darkgreen";
            l.style.fontStyle = "italic";
            fs.appendChild(l);

            var d1 = document.createElement("input");
            d1.type = "date";
            d1.value = '2014-05-01';
            fs.appendChild(d1);

            var d2 = document.createElement("input");
            d2.type = "date";
            d2.value = '2014-05-22';
            fs.appendChild(d2);

            var txt = document.createElement("input");
            txt.type = "text";
            txt.value = '0';
            txt.size = 12;
            txt.style.textAlign = "right";
            fs.appendChild(txt);

            parent.appendChild(fs);
        }

    </script>
</head>
<body>
<input type="hidden" id="hd1" value="0"> </input>
<button onclick="addGroup();"> AddGroup</button>
<div id="myDiv" style="padding:7px;position:relative;margin-        top:15px;width:500px;height:500px;background-color:#ccbbcc;overflow-y:auto;border:1px red solid;border-radius:15px;">
</div>
<script type="text/javascript">addGroup();</script>
</body>
</html>

顺便说一下,你应该关注使用CSS类。