【发布时间】:2011-05-28 08:49:50
【问题描述】:
<div id="content">
<h1>Redigeringsbara stycken</h1>
<p class="editable">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
//JAVASCRIPT
window.onload = function () {
/*
var pElements = document.getElementsByTagName('*');
for (var i=0; i < pElements.length; i++) {
if(pElements[i].className == 'editable')
inPlaceEditor(pElements[i]);
};
*/
document.onclick = catchIt;
};
function inPlaceEditor (editableElement) {
}
var editing = false;
if (document.getElementById && document.createElement)
{
var butt = document.createElement('BUTTON');
var buttext = document.createTextNode('Ready!');
butt.appendChild(buttext);
butt.onclick = saveEdit;
}
function catchIt(e) {
if (editing) {
alert("U're still editing!!");
return;
}
if (!document.getElementById || !document.createElement) return;
if (!e) var obj = window.event.srcElement;
else var obj = e.target;
while (obj.nodeType != 1) {
obj = obj.parentNode;
alert(obj.nodeType);
}
if (obj.tagName == 'textarea' || obj.tagName == 'a') return;
while (obj.nodeName != 'P' && obj.nodeName != 'HTML')
{
obj = obj.parentNode;
alert(obj.nodeName);
}
if (obj.nodeName == 'HTML') {
// alert ("this is HTML");
return;
}
//other way to grab the text instead of innerHTML-method????
var targetInnerHtml = obj.innerHTML;
var textArea= document.createElement('textarea');
var parentnode = obj.parentNode;
parentnode.insertBefore(textArea, obj);
parentnode.insertBefore("<br />", obj);
parentnode.insertBefore(butt, obj);
parentnode.removeChild(obj);
textArea.value = targetInnerHtml ;
textArea.focus();
editing = true;
}
function saveEdit() {
var area = document.getElementsByTagName('textarea')[0];
var paragraph = document.createElement('P');
var parentnode = area.parentNode;
paragraph.innerHTML = area.value;
parentnode.insertBefore(paragraph, area);
parentnode.removeChild(area);
parentnode.removeChild(document.getElementsByTagName('button')[0]);
editing = false;
}
大家好,男孩们!我想知道是否: 1- 还有另一种方法来获取 html-text 而不是使用 innerHtml- 方法?对于那些在 Jquery 中工作的人来说,在 Jquery 中实现这段代码会更容易吗?避免线路,也许更快?谢谢! :)
【问题讨论】:
-
您可能已经知道这一点并且不喜欢它缺乏添加新元素或编辑属性等功能,但
contenteditable="true"将使节点的文本内容及其子元素可由用户编辑.这适用于我在 Chrome、FF 和 IE8 中。 See here for an example. -
@Bryan 你好!不能跟着你!你在你的例子中没有写任何代码?
-
@Bryan 你是什么意思?你没有在你的例子中写任何代码?这是什么 contenteditable="true?
-
单击我评论末尾的链接(“示例请参见此处”)或按照以下说明操作:jsfiddle.net/JxyGB 无论如何,如果您希望整个
div可编辑,您会写<div contenteditable="true">。请注意,其实现的细节因浏览器而异,但基础知识是相当不错的跨浏览器。它实际上从 IE5.5 就已经存在了。
标签: javascript dom innerhtml