Pat*_*ikJ 20 html javascript jquery show-hide
我有这个问题,我需要在单击表格单元格时显示和隐藏div.但是,我也希望人们能够在单元格中选择文本并将其复制而不隐藏信息.
如有必要,完全可以更改设计.:)
这是一个演示这个问题的小提琴
http://jsfiddle.net/k61u66ek/1/
这是小提琴中的HTML代码:
<table border=1>
<tr>
<td>
Information
</td>
<td onClick="toggleInfo()">
<div id="information" style="display:none">
More information that I want to select without hiding
</div>
<div id="clicktoshow">
Click to show info
</div>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
这是javascript:
function toggleInfo() {
$("#clicktoshow").toggle();
$("#information").toggle();
}
Run Code Online (Sandbox Code Playgroud)
任何建议/建议非常感谢!
/帕特里克
Jam*_*xon 33
一种选择是检查返回type的Selection对象window.getSelection:
function toggleInfo() {
var selection = window.getSelection();
if(selection.type != "Range") {
$("#clicktoshow").toggle();
$("#information").toggle();
}
}
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/k61u66ek/4/
更新
如果您要定位的浏览器未type在Selection对象上公开属性,则可以测试所选值的长度:
function toggleInfo() {
var selection = window.getSelection();
if(selection.toString().length === 0) {
$("#clicktoshow").toggle();
$("#information").toggle();
}
}
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/k61u66ek/9/
这可以反过来减少到bool检查toString:
if(!selection.toString()) {
http://jsfiddle.net/k61u66ek/10/
Eug*_*nic 13
代码片段- 当文本突出显示/选择时取消点击事件:
document.getElementById('information').addEventListener('click', (e) => {
const cellText = document.getSelection();
if (cellText.type === 'Range') e.stopPropagation();
})
Run Code Online (Sandbox Code Playgroud)
演示链接:http://jsfiddle.net/5472ja38/
解释
document.getSelection().type检查文档对象级别是否有任何文本已突出显示。如果是这样,类型属性等于“范围”,停止事件传播,这将取消单击切换按钮更改。
摘自MDN
描述当前选择类型的 DOMString。可能的值为:
无:当前尚未做出选择。
插入符号:所选内容已折叠(即插入符号放置在某些文本上,但未选择任何范围)。
范围:已选择一个范围。
您可以使用mouseup,mousedown和mousemove事件来实现这一点:
var isDragging = false;
$("#clickshow")
.mousedown(function() {
isDragging = false;
})
.mousemove(function() {
isDragging = true;
})
.mouseup(function() {
var wasDragging = isDragging;
isDragging = false;
if (!wasDragging) {
$("#information").toggle();
$("#clicktoshow").toggle();
}
});
Run Code Online (Sandbox Code Playgroud)