input和div聚焦,再選擇下拉框,將選擇的資料動態新增到聚焦處
阿新 • • 發佈:2021-01-13
技術標籤:筆記html5cssjavascript
效果圖
程式碼塊
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<style type="text/css">
label {
display: inline-block;
width: 150px;
text-align: right;
}
.theme {
width: 65.6%;
}
select {
width: 150px;
}
.emailContent {
display: inline-block;
resize: none;
width: 65.6%;
height: 130px;
border: 1px solid rgb(118, 118, 118);
padding: 2px;
margin-top: 20px;
}
</style>
<body>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js" ></script>
<div>
<label>主題:</label><input type="text" name="name" value="" id="theme" class="theme input" />
<select class="select" onchange="selectChange(value)">
<option value="" >請選擇</option>
<option value="0">提案機構</option>
<option value="1">提案人</option>
<option value="2">專利卷號</option>
<option value="3">申請號</option>
<option value="4">專利名稱</option>
<option value="5">內部名稱</option>
</select>
</div>
<div>
<label>郵件內容:</label>
<div contenteditable=true class="emailContent input" id="emailContent"></div>
</div>
<script type="text/javascript">
var lastInput = null;
$(function() {
//滑鼠聚焦後獲取對應的 html標籤
var inputs = document.getElementsByClassName("input");
for (i = 0; i < inputs.length; i++) {
inputs[i].onfocus = function() {
lastInput = this;
}
}
});
function selectChange(m) {
//獲取下拉框中要增加的變數
var themeText = $(".select option:selected").text();
//去重(通過indexOf,判斷主題和郵件內容中是否存在,若不存在則增加,若存在不增加);
var themeIndex = $("#theme").val().indexOf("{" + themeText + "}");
var emailContentIndex = $("#emailContent").html().indexOf("{" + themeText + "}");
if(lastInput != null){
if (lastInput.id == "theme") { //給主題動態增加內容
lastInput.focus();
if (m != "" && themeIndex == -1) {
lastInput.value = lastInput.value.substr(0, lastInput.selectionStart) + "{" + themeText + "}" + lastInput.value.substring(
lastInput.selectionStart, lastInput.value.length);
} else {}
} else if (lastInput.id == "emailContent") { //給郵件內容動態增加內容
if (m != "" && emailContentIndex == -1) {
insertHtmlAtCaret("{" + themeText + "}");
} else {}
}
}else{
alert("請聚焦")
}
}
//div 游標處動態增加內容
function insertHtmlAtCaret(html) {
var sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
var el = document.createElement("div");
el.innerHTML = html;
var frag = document.createDocumentFragment(),
node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if (document.selection && document.selection.type != "Control") {
document.selection.createRange().pasteHTML(html);
}
}
</script>
</body>
</html>