2015-10-07 108 views
4

我遇到div元素上升高度的问题。要查看该问题,您必须插入新元素“legal case box”。然后你必须点击到右上div/左上div。你可以输入1个字母,然后删除它(或者只是设置焦点并删除它) - >你可以看到div元素的上升。我不明白为什么会发生。对不起,我的英语不好。谢谢!当用户点击内容时Div改变高度JS

我也注意到,如果不做评论innerDiv1.setAttribute("data-text", "Full Name of the Case");

这问题出现在Safari浏览器中它发生。

[contentEditable=true]:empty:not(:focus):before { 
 
    content:attr(data-text) 
 
} 
 
.boxed { 
 
    margin: 5px; 
 
    border: 2px solid black; 
 
    max-width: calc(100% - 10px); 
 
} 
 

 
.inline { 
 
    display: inline-block; 
 
    vertical-align: middle; 
 
    max-width: calc(100% - 10px); 
 
} 
 
.divTable { 
 
    display: table; 
 
    border-collapse: separate; 
 
    border-spacing: 5px; 
 
} 
 
.divRow { 
 
    display:table-row; 
 
} 
 
.divCell { 
 
    display:table-cell; 
 
    border: 2px solid black; 
 
}
<script> 
 
    function insert(elem) { 
 
     document.getElementById("mainDiv").focus(); 
 
     var sel = window.getSelection(); 
 
     var range = sel.getRangeAt(0); 
 

 
     range.insertNode(elem); 
 
    } 
 

 
    function legalCaseBox() { 
 
     var innerDiv1 = document.createElement('div'); 
 
     innerDiv1.contentEditable = 'true'; 
 
     innerDiv1.style.minWidth = '50pt'; 
 
     innerDiv1.style.minHeight = '50pt'; 
 
     innerDiv1.classList.add('divCell'); 
 
     //innerDiv1.setAttribute("data-text", "Full Name of the Case"); 
 

 
     var innerDiv2 = document.createElement('div'); 
 
     innerDiv2.contentEditable = 'true'; 
 
     innerDiv2.style.minWidth = '50pt'; 
 
     innerDiv2.style.minHeight = '50pt'; 
 
     innerDiv2.classList.add('divCell'); 
 
     innerDiv2.setAttribute("data-text", "Year"); 
 

 
     var firstDiv = document.createElement('div'); 
 
     firstDiv.contentEditable = 'false'; 
 
     firstDiv.classList.add('divTable'); 
 

 
     var rowDiv = document.createElement('div'); 
 
     rowDiv.classList.add('divRow'); 
 
     rowDiv.appendChild(innerDiv1); 
 
     rowDiv.appendChild(innerDiv2); 
 

 
     firstDiv.appendChild(rowDiv); 
 

 
     var secondDiv = document.createElement('div'); 
 
     secondDiv.style.minWidth = '150pt'; 
 
     secondDiv.style.minHeight = '80pt'; 
 
     secondDiv.contentEditable = 'true'; 
 
     secondDiv.classList.add('boxed'); 
 
     secondDiv.setAttribute("data-text", "Case summary"); 
 

 
     var div = document.createElement('div'); 
 
     div.contentEditable = 'false'; 
 
     div.classList.add('inline'); 
 
     div.classList.add('boxed'); 
 
     div.appendChild(firstDiv); 
 
     div.appendChild(secondDiv); 
 

 
     insert(div); 
 
    } 
 
</script> 
 
<body id="main" spellcheck="false"> 
 
    <button onclick="legalCaseBox()">legalCaseBox</button> 
 
    <div id="mainDiv" contenteditable="true"></div> 
 
</body>

http://jsfiddle.net/Lfysfz6k/3/

+0

创建拨弄链接 – Arun

+8

人家让人们的生活......当SM1创建小提琴,有来的人说,使用SO代码段,那么当有人需要小提琴时.. –

+0

我试图运行你的代码时出现错误:'IndexSizeError:未能在'选择'上执行'getRangeAt':0不是有效索引'(Chrome 42) – arcs

回答

0

观察 第一个div是空的,所以它的高度是越来越year div有一些高度大于第一div的,所以当第一个div点击它不会因为文本而使div最小化。 当你点击Year div时,第一个div是空的,并且高度较小,所以直到你输入一年你div最小化的东西。

如果你不想umcomment上述行,然后尝试加入height每个格

+0

谢谢你的回答!我不想取消注释行,但我也不想有div元素的静态高度。我想动态改变高度。你可以帮我吗?我真的不知道如何解决这个问题。 –

+0

只需将高度添加到'.divTable'。像[this](http://jsfiddle.net/Ljhsqdcb/)。输入一些数据并查看div的高度变化。如果这有帮助,那么我会更新我的帖子 –

+0

无论我可以点击第二个div,然后点击另一个区域,然后再次点击第二个div。我看到空荡荡的高度。对不起,我真的不明白:( –

相关问题