添加表格编辑功能
This commit is contained in:
parent
8ad79eca8e
commit
d7f9fd8802
32
src/App.css
32
src/App.css
@ -54,6 +54,7 @@ body {
|
|||||||
|
|
||||||
#preview {
|
#preview {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
min-height: 1024px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Power {
|
.Power {
|
||||||
@ -110,6 +111,37 @@ body {
|
|||||||
top: 20px;
|
top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
background: #7892c2;
|
||||||
|
background-image: -webkit-linear-gradient(top, #7892c2, #476e9e);
|
||||||
|
background-image: -moz-linear-gradient(top, #7892c2, #476e9e);
|
||||||
|
background-image: -ms-linear-gradient(top, #7892c2, #476e9e);
|
||||||
|
background-image: -o-linear-gradient(top, #7892c2, #476e9e);
|
||||||
|
background-image: linear-gradient(to bottom, #7892c2, #476e9e);
|
||||||
|
text-shadow: 0px 1px 0px #283966;
|
||||||
|
-webkit-box-shadow: 0px 0px 0px 2px #9fb4f2;
|
||||||
|
-moz-box-shadow: 0px 0px 0px 2px #9fb4f2;
|
||||||
|
box-shadow: 0px 0px 0px 2px #9fb4f2;
|
||||||
|
font-family: Arial;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 12px 30px 12px 30px;
|
||||||
|
border: solid #4e6096 1px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #476e9e;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttonRightBottom {
|
||||||
|
position: fixed;
|
||||||
|
right: 10px;
|
||||||
|
bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
.object {
|
.object {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
|
87
src/App.js
87
src/App.js
@ -231,6 +231,22 @@ function removeStyleatt (el = document) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加表格可编辑操作
|
||||||
|
function addEditable(el = document) {
|
||||||
|
var tagElements = el.getElementsByTagName('table');
|
||||||
|
for (var m = tagElements.length - 1; m >= 0; m--) {
|
||||||
|
tagElements[m].setAttribute("contenteditable", "true");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 移除表格可编辑标识
|
||||||
|
function removeEditable(el = document) {
|
||||||
|
var tagElements = el.getElementsByTagName('table');
|
||||||
|
for (var m = tagElements.length - 1; m >= 0; m--) {
|
||||||
|
tagElements[m].removeAttribute("contenteditable");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class App extends Component {
|
class App extends Component {
|
||||||
|
|
||||||
constructor(){
|
constructor(){
|
||||||
@ -403,6 +419,63 @@ class App extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.body.innerHTML = finalCode;
|
p.body.innerHTML = finalCode;
|
||||||
|
addEditable(p)
|
||||||
|
|
||||||
|
var tagElements = p.getElementsByTagName('table');
|
||||||
|
for (var m = tagElements.length - 1; m >= 0; m--) {
|
||||||
|
// tagElements[m].addEventListener("input", this.save, false);
|
||||||
|
var tTD; //用来存储当前更改宽度的Table Cell,避免快速移动鼠标的问题
|
||||||
|
var table = tagElements[m];
|
||||||
|
for (let j = 0; j < table.rows[0].cells.length; j++) {
|
||||||
|
table.rows[0].cells[j].onmousedown = function (event) {
|
||||||
|
//记录单元格
|
||||||
|
tTD = this;
|
||||||
|
if (event.offsetX > tTD.offsetWidth - 10) {
|
||||||
|
tTD.mouseDown = true;
|
||||||
|
tTD.oldX = event.x;
|
||||||
|
tTD.oldWidth = tTD.offsetWidth;
|
||||||
|
}
|
||||||
|
//记录Table宽度
|
||||||
|
//table = tTD; while (table.tagName != ‘TABLE') table = table.parentElement;
|
||||||
|
//tTD.tableWidth = table.offsetWidth;
|
||||||
|
};
|
||||||
|
table.rows[0].cells[j].onmouseup = function () {
|
||||||
|
//结束宽度调整
|
||||||
|
if (tTD === undefined) tTD = this;
|
||||||
|
tTD.mouseDown = false;
|
||||||
|
tTD.style.cursor = 'default';
|
||||||
|
};
|
||||||
|
table.rows[0].cells[j].onmousemove = function (event) {
|
||||||
|
//更改鼠标样式
|
||||||
|
if (event.offsetX > this.offsetWidth - 10)
|
||||||
|
this.style.cursor = 'col-resize';
|
||||||
|
else
|
||||||
|
this.style.cursor = 'default';
|
||||||
|
//取出暂存的Table Cell
|
||||||
|
if (tTD === undefined) tTD = this;
|
||||||
|
//调整宽度
|
||||||
|
if (tTD.mouseDown !== null && tTD.mouseDown === true) {
|
||||||
|
tTD.style.cursor = 'default';
|
||||||
|
if (tTD.oldWidth + (event.x - tTD.oldX) > 0)
|
||||||
|
tTD.width = tTD.oldWidth + (event.x - tTD.oldX);
|
||||||
|
//调整列宽
|
||||||
|
tTD.style.width = tTD.width;
|
||||||
|
tTD.style.cursor = 'col-resize';
|
||||||
|
//调整该列中的每个Cell
|
||||||
|
table = tTD;
|
||||||
|
while (table.tagName !== 'TABLE') table = table.parentElement;
|
||||||
|
for (j = 0; j < table.rows.length; j++) {
|
||||||
|
if (table.rows[j].cells[tTD.cellIndex] && table.rows[j].cells[tTD.cellIndex].width) {
|
||||||
|
table.rows[j].cells[tTD.cellIndex].width = tTD.width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//调整整个表
|
||||||
|
//table.width = tTD.tableWidth + (tTD.offsetWidth – tTD.oldWidth);
|
||||||
|
//table.style.width = table.width;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.setState(() => ({html: finalCode}));
|
this.setState(() => ({html: finalCode}));
|
||||||
this.textInput.style.backgroundColor="#7a9a95";
|
this.textInput.style.backgroundColor="#7a9a95";
|
||||||
@ -437,6 +510,19 @@ class App extends Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
save = () => {
|
||||||
|
var preview = document.getElementById("preview")
|
||||||
|
var p = (preview.contentDocument || preview.contentWindow);
|
||||||
|
p = p.document || p;
|
||||||
|
|
||||||
|
removeEditable(p)
|
||||||
|
this.setState(() => ({
|
||||||
|
html: p.body.innerHTML
|
||||||
|
}));
|
||||||
|
|
||||||
|
addEditable(p)
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="App">
|
<div className="App">
|
||||||
@ -494,6 +580,7 @@ class App extends Component {
|
|||||||
</div>
|
</div>
|
||||||
<input type="text" id="input" value={this.state.value} onFocus={this.inputFocus} onBlur={this.inputBlur} onPaste={this.inputPaste} ref={(input) => { this.textInput = input; }} readOnly/>
|
<input type="text" id="input" value={this.state.value} onFocus={this.inputFocus} onBlur={this.inputBlur} onPaste={this.inputPaste} ref={(input) => { this.textInput = input; }} readOnly/>
|
||||||
<textarea id="output" onClick={this.textareaClick} ref={(input) => { this.textareaInput = input; }} value={this.state.html} readOnly></textarea>
|
<textarea id="output" onClick={this.textareaClick} ref={(input) => { this.textareaInput = input; }} value={this.state.html} readOnly></textarea>
|
||||||
|
<input type="button" className="button buttonRightBottom" value="保存" onClick={this.save}/>
|
||||||
<iframe id="preview" title="preview"></iframe>
|
<iframe id="preview" title="preview"></iframe>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user