JavaScript:如何从节点中删除标记?

JavaScript:如何从节点中删除标记?,javascript,jquery,nodes,removechild,Javascript,Jquery,Nodes,Removechild,在前面的一个问题中,有人把我调到了“朗吉”。这很有趣,即使我不完全理解它。我不是一个JavaScript的人。然而,除了1之外,我已经设法用它做了我所需要的大部分事情。这个概念是一个非常基本的RTE,只是粗体,斜体等。我管理了它,创建了一个链接-也这样做了,好的,可能需要一个JS家伙2分钟的时间已经花了我好几个小时了-令人沮丧,但我想我正在学习一点-非常缓慢。无论如何,使用rangy我可以创建一个href链接(请原谅代码太差),如下所示: $('#linkbut').live('click',f

在前面的一个问题中,有人把我调到了“朗吉”。这很有趣,即使我不完全理解它。我不是一个JavaScript的人。然而,除了1之外,我已经设法用它做了我所需要的大部分事情。这个概念是一个非常基本的RTE,只是粗体,斜体等。我管理了它,创建了一个链接-也这样做了,好的,可能需要一个JS家伙2分钟的时间已经花了我好几个小时了-令人沮丧,但我想我正在学习一点-非常缓慢。无论如何,使用rangy我可以创建一个href链接(请原谅代码太差),如下所示:

$('#linkbut').live('click',function(){
        var sel = rangy.getSelection();     
        var range = sel.getRangeAt(0); 
        range.splitBoundaries(); 
        var textNodes = range.getNodes([3]); 
            for (var i = 0, len = textNodes.length; i < len; ++i) { 
            var newLink = document.createElement('a');
            newLink.setAttribute('href','test.html');
            var linkText = document.createTextNode(sel);
            var parent = textNodes[i].parentNode;
            parent.insertBefore(newLink,textNodes[i]); 
            newLink.appendChild(linkText);
            range.deleteContents();
            }
    });
我真正想做的(可能不可能)是使用一些“通用”函数,从上述节点中删除任何标记元素。我尝试做的是:

  • 获取范围-
    sel=rangy.getSelection()
  • 将“sel”转换为字符串变量
    var txt=sel.toString()
  • 删除内容-包括
    a
    元素
    range.deleteContents()
    然后
  • 用“文本”版本var replaceText=document.createTextNode(txt)替换删除的文件;sel.appendChild(replaceText) 我得到“到目前为止”的内容被删除,但我无法得到“新文本替换”的功能


    希望一切都很清楚——因为这对我来说不是

    您可能应该查看如何在jQuery中进行嵌套选择,正如Nexexeus所说,您应该查看如何通过所选方法上的.html()删除内容

    如果您有:

    <div id="mydiv"></div>
    
    您可以通过执行以下操作将其删除:

    $('#mydiv').html('');
    

    我知道一个老问题,但我有同样的问题,并找到了可行的解决办法

    编辑:normalize()方法很重要,这样就不会有一堆相邻的文本节点。它使所有文本节点再次聚合为一个文本节点


    对于您的确切问题,您可以迭代所有节点,然后执行上述代码。

    为什么不执行element.html(“”)?还是我不明白你的问题?@nexexeus-现在你把我完全弄糊涂了:)我甚至不知道怎么做,但问题是一篇文章中可能有很多链接,但我只想删除选中的linkJQuery-这在某种程度上很好,问题是它要么是“prepend”要么是“append”我无法让它在光标处“插入”这样做-因此使用了rangy之类的东西,而且,这不是一个文本区域。这是一个带有#ID的纯“div”,太多/嵌套会在输出时生成非常难看的HTML,因此后端需要清理太多。现在,如果有一种方法可以使用JQ插入光标,我会微笑
    $('#mydiv').append('<a href="test.html">Test Link</a>');
    
    <div id="mydiv"><a href="test.html">Test Link</a></div>
    
    $('#mydiv a');
    
    $('#mydiv').html('');
    
    var el = document.getElementsByTagName('span')[0]; // Get the element in question
    var pa = el.parentNode;
    
    while(el.firstChild) {
        pa.insertBefore(el.firstChild, el);
    }
    
    pa.removeChild(el);
    pa.normalize();