Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当范围选择扩展到父元素时,如果选择的任一个位于标签的中间,则创建额外的元素。_Javascript_Jquery - Fatal编程技术网

Javascript 当范围选择扩展到父元素时,如果选择的任一个位于标签的中间,则创建额外的元素。

Javascript 当范围选择扩展到父元素时,如果选择的任一个位于标签的中间,则创建额外的元素。,javascript,jquery,Javascript,Jquery,代码: 版本显示:所选html为文本(展开): 所以,当我做这样的选择时: 我的代码生成如下“突出显示”: 注意它是如何在选择之前和之后添加一个空的 它应该做的是用选择范围完全包围6,7,8池 以下是代码处理选择扩展: TBR.Selection.get_HTML_from_range = function(range, sel){ var startEl = sel.anchorNode; var endEl = sel.focusNode; if (startEl != endEl){

代码:
版本显示:所选html为文本(展开):

所以,当我做这样的选择时:

我的代码生成如下“突出显示”:

注意它是如何在选择之前和之后添加一个空的
  • 它应该做的是用选择范围完全包围6,7,8池

    以下是代码处理选择扩展:

    TBR.Selection.get_HTML_from_range = function(range, sel){
    var startEl = sel.anchorNode;
    var endEl = sel.focusNode;
    
    if (startEl != endEl){
            if (startEl != range.commonAncestorContainer) {
            while (startEl.parentNode != range.commonAncestorContainer) {
                startEl = startEl.parentNode;
            }
        }
        if (endEl != range.commonAncestorContainer) {
            while (endEl.parentNode != range.commonAncestorContainer) {
                endEl = endEl.parentNode;
            }
        }
            range.setStartBefore(startEl);
            range.setEndAfter(endEl);
        }
    sel.addRange(range);
    
    var container = document.createElement("span");
    container.appendChild(sel.getRangeAt(0).cloneContents());
    
    html = container.innerHTML;
    
        if (html.length < MINIMUM_SELECTION_LENGTH) {return false;}
        return html;
    }
    
    TBR.Selection.get\u HTML\u from\u range=函数(range,sel){
    var startEl=sel.anchorNode;
    var endEl=选择聚焦节点;
    如果(startEl!=endEl){
    if(startEl!=range.commonAncestorContainer){
    while(startEl.parentNode!=range.commonAncestorContainer){
    startEl=startEl.parentNode;
    }
    }
    if(endEl!=range.commonAncestorContainer){
    while(endEl.parentNode!=range.commonAncestorContainer){
    endEl=endEl.parentNode;
    }
    }
    范围。设置开始之前(startEl);
    range.setEndAfter(endEl);
    }
    选择添加范围(范围);
    var container=document.createElement(“span”);
    container.appendChild(sel.getRangeAt(0.cloneContents());
    html=container.innerHTML;
    if(html.length<最小选择长度){return false;}
    返回html;
    }
    
    基本上,如果选择的开始和结束在不同的DOM节点上,则选择需要展开,以便选择不包含损坏的DOM元素(所有标记都有匹配的结束标记,等等)
    但我有一种感觉,选择正在破坏HTML,浏览器正在修复HTML,然后选择才会一直扩展。我不确定。

    包装在一些
  • 元素周围不是有点不合适吗?是的。我的意思是,但是其他块样式元素仍然存在问题。如果有一种方法可以轻松地、被动地扩展到整个UL/OL,那就太棒了。