【问题标题】:using other method than innerHTML in js?在js中使用innerHTML以外的其他方法?
【发布时间】: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 可编辑,您会写&lt;div contenteditable="true"&gt;。请注意,其实现的细节因浏览器而异,但基础知识是相当不错的跨浏览器。它实际上从 IE5.5 就已经存在了。

标签: javascript dom innerhtml


【解决方案1】:

如果你会使用 jQuery,你可以让它变得简单。你使用的事件是什么?

您可以使用jQuery html() 方法获取/设置innerHTML。

获取innerHTML

$(obj).html()

设置它:

$(textArea).value(targetInnerHtml)

【讨论】:

  • 你能告诉我们你到底在找什么吗?我的理解是,如果您单击 phtml 元素,那么您正在创建一个文本区域并将单击元素的内容添加到文本区域,对吗?
  • 非常正确!我想编辑我点击的文本..基本上。
【解决方案2】:

看来你只是想要文字,所以你可以写:

var targetText = obj.textContent || obj.innerText;

更强大的版本是:

if (typeof obj.textContent == 'string') {
    targetText = obj.textContent;
} else if (typeof obj.innerText == 'string') {
    targetText = obj.innerText;
}

它可以变成一个函数,这样你就可以调用它,而不必每次都写上面的。

其他cmets:

function catchIt(e) {
editing = false;

  if (editing) {

编辑怎么会是真的?

  parentnode.insertBefore(butt, obj);

butt 没有在任何地方声明或初始化。

【讨论】:

  • 在 catchIt 函数的末尾编辑是真的......只要你在里面编辑文本是真的......你在跟着我吗?
  • @YoniGeek 我相信 Rob 是在说原始的 if (editing) {...} 声明没有做任何事情,因为您声明 editing 在它之前将是错误的。也许它在其他函数中有意义,但这里if 语句在任何情况下都不会计算。
  • @Bryan 如果我可以的话 Bryan:这不是真的除了编辑之外,我无法做任何事情......通过这种方式,我检查用户是否仍在编辑文本。你在跟着我吗? :)
猜你喜欢
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
相关资源
最近更新 更多