gpt4 book ai didi

javascript - 如果子 ID 为 :focus,则可以添加/删除类

转载 作者:行者123 更新时间:2023-11-30 17:07:08 32 4
gpt4 key购买 nike

我将一个 div 设置为 contenteditable 并且可以编辑该 div 内的所有内容。现在,当我单击 div 时,我会自动添加一个选定的类(如果在我删除它并将其添加到新选择之前可见),我有下一步和前进按钮,因此如果我正在使用平板电脑或智能手机,我可以更改我的选择电话。

这就是我需要帮助的地方。

所以我选择了中间的 div,当我将光标移动到 #dynamic-storage 的另一个子级时,我遇到了删除所选类并将其添加到新子级的问题选择。 (不是示例中的跨度,因为它的父级是一个 div。这就是我想要选择的,因为此示例中的 div 是 #dynamic-storage 的子级(例如 #dynamic-storage > 格)

本文底部提供的代码片段不包含上面的屏幕截图和 fiddle 链接中提供的箭头或菜单栏,因为在给定的发布时间不需要该代码。我将这篇文章的重点放在为 #dynamic-storage 的子项处理 .selected 类的任务上。

enter image description here

$(document).ready(function() {
// Select Elements
var SelectElements = function() {
$("#dynamic-storage").children().on("mouseup touchend", function() {
if ( $(".selected").is(":visible") ) {
$(".selected").removeClass("selected");
}

$(this).addClass("selected");
});
};
// Clear Selection
var ClearSelection = function() {
$(".selected").removeClass("selected");
};
SelectElements();

// Handles Hotkeys
$(document).keyup(function(e) {
// Up & Down Arrow Keys To Select/Deselect Element in Editable
if (e.which === 38 || 40 ) {
if ( $(".selected").is(":focus") ) {
alert("correct");
} else if ( $(".selected").is(":blur") ) {
alert("incorrect");
}
}
});

});
/* Body */
#dynamic-storage {
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 0;
outline: 0;
}

#dynamic-storage .selected {
outline: 2px dotted #69f;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=9" />
<link type='text/css' rel='stylesheet' href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/smoothness/jquery-ui.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<div id="dynamic-storage" contenteditable="true">
<div class="header" align="center">
<h1>Welcome</h1>
<h5>My name is Michael.</h5>
<span>Hello world</span>
</div>
<div class="header selected" align="left">
<h1>Welcome</h1>
<h5>My name is Michael.</h5>
</div>
<div class="header" align="right">
<h1>Welcome</h1>
<h5>My name is Michael.</h5>
</div>
</div>
</body>
</html>

fiddle :http://liveweave.com/uyz4VK
fiddle :http://jsbin.com/kujuxofeju/1/edit?html,js,output

最佳答案

具有属性 contenteditable='true' 的元素的所有内容都可以像在单个 文本区域中一样进行编辑。这就是为什么当您移动光标时 focus/blur 事件不会发生的原因。在带有 contenteditable='true' 的元素中的任何地方,您仍然在同一个文本区域中,没有离开或进入它。

这里的解决方案是处理类似于textarea的coursor定位。

要获取表示当前选择的对象,我们使用函数:

var getSelection;
if (window.getSelection) {
// IE 9 and non-IE
getSelection = function() {
var sel = window.getSelection(), ranges = [];
if (sel.rangeCount) {
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
ranges.push(sel.getRangeAt(i));
}
}
return ranges;
};
} else if (document.selection && document.selection.createRange) {
// IE <= 8
getSelection = function() {
var sel = document.selection;
return (sel.type != "None") ? sel.createRange() : null;
};
}

然后我们需要做接下来的操作:从#dynamic-storage的第一级 child 中删除类.selected,获取带有游标的元素,然后上DOM 找到最接近 #dynamic-storage 的父级以添加类 .selected:

// Handles Hotkeys
$(document).keyup(function(e) {
// Up & Down Arrow Keys To Select/Deselect Element in Editable
if (e.which === 38 || 40 ) {
$('#dynamic-storage > div').removeClass('selected');
var selectedElem = getSelection()[0].commonAncestorContainer.parentElement;
$(selectedElem).closest('#dynamic-storage > div').addClass('selected');
}
});

Here is the working fiddle

关于javascript - 如果子 ID 为 :focus,则可以添加/删除类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27770525/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com