使文本显示为几行可点击的线条
Make appear a text with several clickable lines
我有一个表。对于某些元素,我想制作这样一种效果:当我们将鼠标悬停在(或单击)一个元素上时,它旁边会出现一个文本,该文本可以有几行,有些行可以点击。
例如,在下面代码生成的表格中,当鼠标移到30
上时,会出现一个文本
<table style="width:100%">
<tr>
<th>First Name</th>
<th>Points</th>
</tr>
<tr>
<td>Jill</td>
<td><span title="monday: 10; tuesday: 10; wednesday: 10">30</span></td>
</tr>
</table>
JSBin
然而,我希望出现的文本是monday: 10
, tuesday: 10
和wednesday: 10
逐行。我们可以点击例如monday: 10
来打开一个页面或移动到页面的另一部分。title
不允许。
有人知道如何实现这一点吗?我们可以使用JavaScript, CSS…
(*这个线程没有解释如何在出现的文本中插入链接*)
你可以尝试使用链接的工具提示
参见JQuery示例
https://codepen.io/jamilhijjawi/pen/lIwbK
你可以尝试简单的工具提示,像下面的链接
http://www.w3schools.com/css/css_tooltip.asp
这里有一个解决方案,它将mshameer
的答案的某些方面与您提供的bin相结合。
解决方案JSBin
这个脚本有两种创建工具提示的方法。第一个元素可以在HTML属性中声明,使用|
字符作为行分隔符,第二个元素允许作为JQuery对象直接传递元素及其工具提示。这意味着,如果您不需要任何特定的单击样式,您不必放弃html声明的梦想。
<h1 data-over="You have hovered|Over this">Here is a title</h1>
<p id="test">TEST</p>
通过data-over
属性进行搜索的JavaScript:
// Search for text if it's simple in the HTML
var $dataElements = $("[data-over]");
$dataElements.each(function (index, el) {
var $el = $(el);
var text = $el.attr("data-over");
if (text) {
// Split by "|"
text = text.split("|");
createDataOver($el, text);
}
});
JavaScript手动添加工具提示:
// Or provide it yourself.
var $testData = $(document.createElement("span"));
$testData.text("Click me.").click(function () {
alert("Clicked");
});
createDataOver($("#test"), $testData);
createDataOver
做真正的工作:
function createDataOver($el, data) {
var $holder = $(document.createElement("div"));
$holder.addClass("over hidden");
// Check if we provided JQuery or a string array
if (data instanceof jQuery) {
// Manually make it relatively positioned
$el.css("position", "relative");
data.addClass("over-line");
$holder.append(data);
}
else {
data.forEach(function (line) {
var $line = $(document.createElement("span"));
$line.text(line);
$line.addClass("over-line");
$holder.append($line);
});
}
// append with the hidden class to start
$el.append($holder);
// Create a closure with a timeout variable
// So it doesn't disappear immediately if
// we don't want it to!
(function closure() {
var timeoutCancel = -1;
$el.mouseenter(function () {
if (timeoutCancel !== -1) {
clearTimeout(timeoutCancel);
timeoutCancel = -1;
}
$holder.removeClass("hidden");
});
$el.mouseleave(function () {
timeoutCancel = setTimeout(function () {
if (timeoutCancel !== -1)
$holder.addClass("hidden");
}, 500);
});
}());
}
警告
此解决方案要求工具提示父级为position: relative
。它也不会具有与title
属性相同的条目边界—display: block
h3
元素将在其整个行中响应mouseenter
。由于您提供的JSBin使用表,因此这可能不是问题。
我还尝试通过在mouseleave上设置半秒超时来控制时间,这样用户就可以在这段时间内将鼠标移回到元素上继续查看它,而不是立即失去它的视图。
- MVC中关于表的自定义工具提示-每行显示数据
- Sencha Touch使用pageSize配置只加载几行
- 用于匹配错误和关联几行的正则表达式
- 我可以'不要让这几行简单的代码正常工作,也不知道为什么
- 如果字段在几行空行之后包含前几个字符,则验证描述字段长度
- 只对表的几行进行排序 - jquery/ javascript
- 用户未输入几行时的 JavaScript 计算(添加剩余的行值)
- 单击时添加几行,双击删除添加的行
- 数组中的字符串显示为未定义,尽管在几行之前成功.log控制台
- 如何将剑道网格上的选定行显示在文本框中
- 如何在访问者访问我的网站后几秒钟显示 facebook 框模式
- 不太确定几行代码
- 逐行显示递归
- 表中的行显示/隐藏-remove()
- 有没有什么方法可以避免在谷歌可视化图表的图例中分页,并在一页中用两行显示所有行
- 限制每行显示的单选按钮
- 使文本显示为几行可点击的线条
- 在MVC中显示几行文本
- 带有几行代码的CodeMirror在触发重绘之前不会显示
- Angular JS在textarea中显示最后几行