【发布时间】:2019-10-15 17:57:14
【问题描述】:
我很难将一个(工具提示)元素链接到另一个元素。一旦用户将鼠标悬停在另一个元素上,工具提示元素就会显示出来。
我的想法是相应地设置一个jQuery悬停函数来操作显示属性。
所以我的问题基本上是
如何在jQuery中构造这种函数?现在悬停时根本没有效果,即使我只是在悬停时尝试
alert("Test")。鼠标指针似乎无法识别创建的元素。悬停时如何将工具提示元素放置在初始元素旁边? (现在工具提示元素默认是隐藏的,不会在 HTML 正文中占据任何位置)
这是 JS 部分,尚未显示悬停效果(带有一个工具提示的示例)
$( "#id10" ).hover(
function() {
$( "#tooltip10" ).removeAttr("display");
}, function() {
$( "#tooltip10" ).css( "display:none" );
}
);
循环部分工作得很好:
$.ajax({
method: "GET",
async: "True",
dataType: "json",
url: "https://cors-anywhere.herokuapp.com/https://www.api-football.com/demo/api/v2/fixtures/team/" + team_id,
success: function(response) {
$('.datapoint').remove();
var responseData = response.api.fixtures;
$.each(responseData, function(i) {
if (team_id == response.api.fixtures[i].homeTeam.team_id) {
var teamData = home;
} else {
var teamData = away;
}
if (response.api.fixtures[i].goalsHomeTeam > response.api.fixtures[i].goalsAwayTeam && teamData == home) {
var resultDataPoint = '<div class="datapointgreen datapoint"' + 'id=id' + response.api.fixtures[i].fixture_id + '"></div>';
} else if (response.api.fixtures[i].goalsHomeTeam > response.api.fixtures[i].goalsAwayTeam && teamData == away) {
var resultDataPoint = '<div class="datapointred datapoint"' + 'id=id' + response.api.fixtures[i].fixture_id + '"></div>';
} else if (response.api.fixtures[i].goalsHomeTeam < response.api.fixtures[i].goalsAwayTeam && teamData == away) {
var resultDataPoint = '<div class="datapointgreen datapoint"' + 'id=id' + response.api.fixtures[i].fixture_id + '"></div>';
} else if (response.api.fixtures[i].goalsHomeTeam < response.api.fixtures[i].goalsAwayTeam && teamData == home) {
var resultDataPoint = '<div class="datapointred datapoint"' + 'id=id' + response.api.fixtures[i].fixture_id + '"></div>';
} else {
var resultDataPoint = '<div class="datapointblue datapoint"' + 'id=id' + response.api.fixtures[i].fixture_id + '"></div>';
}
// create tooltip container
var tooltip = $('<table class="tooltip" style="display:none" id="tooltip' + response.api.fixtures[i].fixture_id +
'"><tr><td>Hometeam</td>' +
'<td>' + response.api.fixtures[i].goalsAwayTeam + '</td>' +
'<td>3 (1)</td></tr>' +
'<tr><td>hometeam</td>' +
'<td>' + response.api.fixtures[i].goalsHomeTeam + '</td>' +
'<td>2 (1)</td></tr>' +
'<tr><td>Venue</td>' +
'<td>Emirates</td></tr>' +
'</table>`');
$('.resultData').append(tooltip);
$('.resultData').append(resultDataPoint);
});
一些插图:
可重现的代码sn-p:
$("#id10").hover(
function() {
$("#tooltip10").css("display", null);
},
function() {
$("#tooltip10").css("display", "none");
}
);
#mainContent .resultData .tooltip {
height: 100px;
width: 100px;
}
#mainContent .resultData {
padding-right: 6px;
padding-left: 3px;
padding-top: 6px;
vertical-align: middle;
float: left;
z-index: -1;
}
#mainContent .datapointgreen {
margin-left: 12px;
height: 15px;
width: 15px;
border-radius: 50%;
background-color: #00DC8E;
}
<body>
<div id="mainContent">
<table class="tooltip" style="display:none" id="tooltip10">
<tr>
<td>Hometeam</td>
<td> Test </td>
<td>3 (1)</td>
</tr>
<tr>
<td>hometeam</td>
<td> Test </td>
<td>2 (1)</td>
</tr>
<tr>
<td>Venue</td>
<td>Emirates</td>
</tr>
</table>
<div class="datapointgreen datapoint" id="id10"></div>
</div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
【问题讨论】:
-
一件事:
display不是元素的属性。它是元素样式的属性。所以你不能使用removeAttr来删除它。您可以使用css("display", null)将其设置为空。这会导致在else分支中滥用css();它应该是css("display", "none")。见the documentation。 -
关于问题的其余部分;您确实需要显示运行此代码的 HTML。您可以使用Stack Snippets 为您遇到的问题提供minimal reproducible example。
-
感谢您指出这一点,我已相应地进行了修复。我还发现在数据点 id 中有一个双 " 包括我也修复了。不过,悬停的任何一方.. 很快就会添加一个可复制的。
-
@HereticMonkey 我包含了代码 sn-p。抱歉这么晚了。