如果所述元素是第一个子元素,则无法删除contentEditable父元素中的HTML元素

达克

问题

我正在构建一个自定义的布尔搜索输入,该输入应接受一些“布尔标签气泡”形式的布尔标签,可以通过单击将其添加到查询中。基本上,无需键入{AND},用户可以单击“ AND”布尔标记并将其添加到输入中。请查看所附图片以了解布局-https: //i.imgur.com/Fwa00zA.png

LE:此行为似乎仅在Chrome上发生。

关于问题:如果在输入中首先添加标签(如布局示例图片中所示),并且在添加标签后,类型字符仅在标签之前返回并按Backspace键,则标签将不会被删除。

仅当用户删除所有添加的字符时,才可以通过退格键删除标签-基本上在最后移动插入记号,然后通过退格键删除所有内容。

我已经尝试过的

最初,我在问题和所有移动范围之间建立了联系,当我使用字符之间的“向左/向右”箭头键向布尔标签移动时,就产生了该跨度。因此,我编写了一些代码,每当我按下一个键时,我都会扫描contentEditable父对象并清除所有创建的span和brs。这清除了一些奇怪的情况,但是如果它是第一个元素,并且在布尔值标签之后有字符或其他元素,我仍然无法删除标签。

几个小时前,我发现了这个-可编辑的div退格键,并删除了文本节点问题插入我的布尔标签的函数将标签创建为元素。我尝试按照该帖子中的建议创建节点元素。即使作为按钮,如果我的元素是第一个元素,但后面有字符,则不能删除它。

我的一些代码

对于以boolean标签作为元素的当前版本,这是一种在单击时创建我的boolean标签并将其添加到父元素的方法。

            addBooleanTag($event){
                this.$refs.divInput.focus();
                if(this.typed == false & this.input_length == 0){
                    this.$refs.divInput.innerHTML = ''
                    var space = '';
                    this.typed = true
                    this.saveCursorLocation();
                }
                rangy.restoreSelection(this.saved_sel);

                var node = document.createElement('img');
                node.src = $event.img;
                node.className = "boolean-button--img boolean-button--no-margin";
                node.addEventListener('click', () => {
                    this.$refs.divInput.removeChild(node);
                })
                this.insertNode(node);
                this.saveCursorLocation();
            },

这是contentEditable父元素的样子

                <div 
                        @keydown.enter.prevent
                        @blur="addPlaceholder"
                        @keyup="saveCursorLocation(); clearHtmlElem($event)"
                        @input="updateBooleanInput($event); clearHtmlElem($event)"
                        @paste="pasted"
                        v-on:click="clearPlaceholder(); saveCursorLocation(); deleteBooleanTag();"
                        class="input__boolean input__boolean--no-focus"
                        ref="divInput"
                        contenteditable="true">Boolean search..</div>

这是清除break和span的contentEditable父级的方法

            clearHtmlElem($event){
                var i = 0;
                var temp = $event.target.querySelectorAll("span, br");
                if(temp.length > 0){
                    for(i = 0; i < temp.length; i++){
                        if(!temp[i].classList.contains('rangySelectionBoundary')){
                            if (temp[i].tagName == "br"){
                                temp[i].parentNode.removeChild(temp[i]);
                            } else {
                                temp[i].outerHTML = temp[i].innerHTML;
                            }
                        }
                    }
                }
            },

预期行为与实际结果

我希望当我在boolean标记(img元素)之后的尖号后按退格键时,删除该元素。正常的行为。相反,它什么也不做。删除添加的element / boolean标签的唯一方法是,如果标签是最后要删除的东西。

请查看我在重现问题时制作的此gif。https://imgur.com/a/vAXop2s-控制台“怪异”时,基本上是我对img元素/布尔标签和拒绝删除的元素按了退格键。

达克

在一些帮助下,我设法弄清了这一点。我在这里发布此信息,供任何对contentEditable有问题的人使用。

不要设置contentEditable元素的样式。我在contentEditable div上有一些样式,这弄乱了很多内容,例如插入符号定位,退格键无法正常工作等。对其进行环绕并在该包装上移动样式。

LE:contentEditable元素行为异常的一个(可能是主要的)原因是由于具有display:flex附加到它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用jQuery访问父元素的第一个/最后一个子元素中的数据属性

计算 XSLT 中每个父级的不同第一个子值元素

Selenium:如何单击html元素的第一个子元素

通过第一个子元素的名称选择HTML元素

CSS第一个子元素悬停

立即获得第一个子元素

父div取第一个子元素的高度,而不是所有子元素的高度之和

嵌套v-for仅显示Vue中第一个元素的最后一个子元素

CSS:仅针对父级中的第一个子元素 - 第一个类型不起作用

在 XSLT 中选择第一个第一个子元素

如果子列表的第一个元素在Python中是唯一的,则从第一个子列表获取前两项

每个配置文件仅允许一个configSections元素,并且如果存在,则必须是根配置元素的第一个子元素

可以选择第一个子元素(当第一个元素通常不同时)

选择除第一个子元素之后的每个元素

如何使用css识别表格元素的第一个子元素?

在元素的第一个子元素上调用.setAttribute()时出错

如何删除HTML表中的所有<tr>元素(第一个元素除外)

只获取第一个元素的子元素

如何删除每个元素的第一个元素

使用AngularJS Jqlite,如何找到某个元素类型的元素的第一个子元素?

:: before伪元素不会成为原始列表元素的第一个子元素

CSS-选择第一个匹配的元素(而不是第一个子元素或第一个类型)

在列表中删除元组的第一个元素

从数组中删除第一个元素

遍历嵌套集合以找到与条件匹配的第一个子-子-子元素

根据子数组中的第一个元素删除numpy子数组

从 jQuery 中的父元素内部获取第一个 (n) 个元素

Cypress:根据另一个子元素获取父元素的子元素

是每个子列表的第一个元素?