不要在悬停事件上更新多个 div
Dont update multiple divs on hover events
我正在使用 html、css 和 js 编写一个简短的调查。我想问一个问题,然后让用户按 1-5 的等级评分。
理想情况下,我希望比例能够响应,所以如果您将鼠标悬停在 1 上,它会变成黄色。如果将鼠标悬停在 2 上,它会同时将 1 和 2 变为黄色。如果将鼠标悬停在 3 上,它会将前 3 个框变为黄色。你明白了。
当调查中只有一个问题时,此方法非常简单,但问题的数量可能未知(且冗长)。
我希望我可以使用相同的 JS 函数和 css 类 但是当我将鼠标悬停在页面上某个问题的 1 上时,页面上的所有问题都会更新为黄色.执行此操作的最佳方法是什么,以便每个答案只会单独更新而不是整个页面?
这是当前的 HTML 代码:
<table>
<thead>
<tr>
<td>Overall</td>
<td></td>
<td></td>
</tr>
</thead>
<tbody>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div class="scale-1"></div>
<div class="scale-2"></div>
<div class="scale-3"></div>
<div class="scale-4"></div>
<div class="scale-5"></div>
</td>
<td>Comment</td>
</tr>
<tr>
<td>Question 2</td>
<td width="300px">
<div class="scale-text"></div>
<div class="scale-1"></div>
<div class="scale-2"></div>
<div class="scale-3"></div>
<div class="scale-4"></div>
<div class="scale-5"></div>
</td>
<td>Comment</td>
</tr>
</tbody>
<table>
和 JS:
<script>
$(function() {
$('.scale-1').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-text').html("Strongly Disagree");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
$(function() {
$('.scale-2').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-2').css('background-color', 'yellow');
$('.scale-text').html("Disagree");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-2').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
$(function() {
$('.scale-3').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-2').css('background-color', 'yellow');
$('.scale-3').css('background-color', 'yellow');
$('.scale-text').html("Neutral");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-2').css('background-color', '');
$('.scale-3').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
$(function() {
$('.scale-4').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-2').css('background-color', 'yellow');
$('.scale-3').css('background-color', 'yellow');
$('.scale-4').css('background-color', 'yellow');
$('.scale-text').html("Agree");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-2').css('background-color', '');
$('.scale-3').css('background-color', '');
$('.scale-4').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
$(function() {
$('.scale-5').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-2').css('background-color', 'yellow');
$('.scale-3').css('background-color', 'yellow');
$('.scale-4').css('background-color', 'yellow');
$('.scale-5').css('background-color', 'yellow');
$('.scale-text').html("Strongly Agree");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-2').css('background-color', '');
$('.scale-3').css('background-color', '');
$('.scale-4').css('background-color', '');
$('.scale-5').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
您可以简化代码如下。
当鼠标悬停在某个元素上时,需要使用this
(指的是当前悬停的元素)引用来查找相关元素
$(function() {
var scaletext = {
1: 'SA',
2: 'A',
3: 'N',
4: 'Da',
5: 'SDa'
}
$('.scale').hover(function() {
var $this = $(this);
$this.prevAll('.scale').addBack().css('background-color', 'yellow');
$this.siblings('.scale-text').html(scaletext[$this.data('scale')]);
}, function() {
var $this = $(this);
$this.prevAll('.scale').addBack().css('background-color', '');
$this.siblings('.scale-text').html("No Rating");
});
});
td > div.scale {
padding: 5px;
background-color: lightgrey;
display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<td>Overall</td>
<td></td>
<td></td>
</tr>
</thead>
<tbody>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div data-scale="1" class="scale scale-1"></div>
<div data-scale="2" class="scale scale-2"></div>
<div data-scale="3" class="scale scale-3"></div>
<div data-scale="4" class="scale scale-4"></div>
<div data-scale="5" class="scale scale-5"></div>
</td>
<td>Comment</td>
</tr>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div data-scale="1" class="scale scale-1"></div>
<div data-scale="2" class="scale scale-2"></div>
<div data-scale="3" class="scale scale-3"></div>
<div data-scale="4" class="scale scale-4"></div>
<div data-scale="5" class="scale scale-5"></div>
</td>
<td>Comment</td>
</tr>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div data-scale="1" class="scale scale-1"></div>
<div data-scale="2" class="scale scale-2"></div>
<div data-scale="3" class="scale scale-3"></div>
<div data-scale="4" class="scale scale-4"></div>
<div data-scale="5" class="scale scale-5"></div>
</td>
<td>Comment</td>
</tr>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div data-scale="1" class="scale scale-1"></div>
<div data-scale="2" class="scale scale-2"></div>
<div data-scale="3" class="scale scale-3"></div>
<div data-scale="4" class="scale scale-4"></div>
<div data-scale="5" class="scale scale-5"></div>
</td>
<td>Comment</td>
</tr>
</tbody>
<table>
您可以 select jQuery 中 div 的所有先前元素。
这是您的解决方案:
var frases = ["Strongly Disagree", "Disagree", "Neutral", "Agree", "Strongly agree"];
$('.scale').hover(function() {
$(this).prevAll('.scale').css('background-color', 'yellow').end().css('background-color', 'yellow');
$(this).prevAll('.scale-text').html(frases[$(this).data('value')-1]);
}, function() {
// on mouseout, reset the background colour
$(this).prevAll('.scale').css('background-color', '').end().css('background-color', '');
$(this).prevAll('.scale-text').html("No Rating");
});
只需向所有评分元素添加一个 css class,例如 scale
,然后执行以下操作:
$(function() {
$('.scale').hover(function() {
var $previous = $(this);
while ($previous.length && $previous.hasClass('scale')) {
$previous.css('background-color', 'yellow');
$previous = $previous.prev();
}
}, function() {
var $previous = $(this);
while ($previous.length && $previous.hasClass('scale')) {
$previous.css('background-color', '');
$previous = $previous.prev();
}
})
});
我正在使用 html、css 和 js 编写一个简短的调查。我想问一个问题,然后让用户按 1-5 的等级评分。
理想情况下,我希望比例能够响应,所以如果您将鼠标悬停在 1 上,它会变成黄色。如果将鼠标悬停在 2 上,它会同时将 1 和 2 变为黄色。如果将鼠标悬停在 3 上,它会将前 3 个框变为黄色。你明白了。
当调查中只有一个问题时,此方法非常简单,但问题的数量可能未知(且冗长)。
我希望我可以使用相同的 JS 函数和 css 类 但是当我将鼠标悬停在页面上某个问题的 1 上时,页面上的所有问题都会更新为黄色.执行此操作的最佳方法是什么,以便每个答案只会单独更新而不是整个页面?
这是当前的 HTML 代码:
<table>
<thead>
<tr>
<td>Overall</td>
<td></td>
<td></td>
</tr>
</thead>
<tbody>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div class="scale-1"></div>
<div class="scale-2"></div>
<div class="scale-3"></div>
<div class="scale-4"></div>
<div class="scale-5"></div>
</td>
<td>Comment</td>
</tr>
<tr>
<td>Question 2</td>
<td width="300px">
<div class="scale-text"></div>
<div class="scale-1"></div>
<div class="scale-2"></div>
<div class="scale-3"></div>
<div class="scale-4"></div>
<div class="scale-5"></div>
</td>
<td>Comment</td>
</tr>
</tbody>
<table>
和 JS:
<script>
$(function() {
$('.scale-1').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-text').html("Strongly Disagree");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
$(function() {
$('.scale-2').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-2').css('background-color', 'yellow');
$('.scale-text').html("Disagree");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-2').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
$(function() {
$('.scale-3').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-2').css('background-color', 'yellow');
$('.scale-3').css('background-color', 'yellow');
$('.scale-text').html("Neutral");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-2').css('background-color', '');
$('.scale-3').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
$(function() {
$('.scale-4').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-2').css('background-color', 'yellow');
$('.scale-3').css('background-color', 'yellow');
$('.scale-4').css('background-color', 'yellow');
$('.scale-text').html("Agree");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-2').css('background-color', '');
$('.scale-3').css('background-color', '');
$('.scale-4').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
$(function() {
$('.scale-5').hover(function() {
$('.scale-1').css('background-color', 'yellow');
$('.scale-2').css('background-color', 'yellow');
$('.scale-3').css('background-color', 'yellow');
$('.scale-4').css('background-color', 'yellow');
$('.scale-5').css('background-color', 'yellow');
$('.scale-text').html("Strongly Agree");
}, function() {
// on mouseout, reset the background colour
$('.scale-1').css('background-color', '');
$('.scale-2').css('background-color', '');
$('.scale-3').css('background-color', '');
$('.scale-4').css('background-color', '');
$('.scale-5').css('background-color', '');
$('.scale-text').html("No Rating");
});
});
您可以简化代码如下。
当鼠标悬停在某个元素上时,需要使用this
(指的是当前悬停的元素)引用来查找相关元素
$(function() {
var scaletext = {
1: 'SA',
2: 'A',
3: 'N',
4: 'Da',
5: 'SDa'
}
$('.scale').hover(function() {
var $this = $(this);
$this.prevAll('.scale').addBack().css('background-color', 'yellow');
$this.siblings('.scale-text').html(scaletext[$this.data('scale')]);
}, function() {
var $this = $(this);
$this.prevAll('.scale').addBack().css('background-color', '');
$this.siblings('.scale-text').html("No Rating");
});
});
td > div.scale {
padding: 5px;
background-color: lightgrey;
display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<td>Overall</td>
<td></td>
<td></td>
</tr>
</thead>
<tbody>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div data-scale="1" class="scale scale-1"></div>
<div data-scale="2" class="scale scale-2"></div>
<div data-scale="3" class="scale scale-3"></div>
<div data-scale="4" class="scale scale-4"></div>
<div data-scale="5" class="scale scale-5"></div>
</td>
<td>Comment</td>
</tr>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div data-scale="1" class="scale scale-1"></div>
<div data-scale="2" class="scale scale-2"></div>
<div data-scale="3" class="scale scale-3"></div>
<div data-scale="4" class="scale scale-4"></div>
<div data-scale="5" class="scale scale-5"></div>
</td>
<td>Comment</td>
</tr>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div data-scale="1" class="scale scale-1"></div>
<div data-scale="2" class="scale scale-2"></div>
<div data-scale="3" class="scale scale-3"></div>
<div data-scale="4" class="scale scale-4"></div>
<div data-scale="5" class="scale scale-5"></div>
</td>
<td>Comment</td>
</tr>
<tr>
<td>Question 1</td>
<td width="300px">
<div class="scale-text">No Rating</div>
<div data-scale="1" class="scale scale-1"></div>
<div data-scale="2" class="scale scale-2"></div>
<div data-scale="3" class="scale scale-3"></div>
<div data-scale="4" class="scale scale-4"></div>
<div data-scale="5" class="scale scale-5"></div>
</td>
<td>Comment</td>
</tr>
</tbody>
<table>
您可以 select jQuery 中 div 的所有先前元素。
这是您的解决方案:
var frases = ["Strongly Disagree", "Disagree", "Neutral", "Agree", "Strongly agree"];
$('.scale').hover(function() {
$(this).prevAll('.scale').css('background-color', 'yellow').end().css('background-color', 'yellow');
$(this).prevAll('.scale-text').html(frases[$(this).data('value')-1]);
}, function() {
// on mouseout, reset the background colour
$(this).prevAll('.scale').css('background-color', '').end().css('background-color', '');
$(this).prevAll('.scale-text').html("No Rating");
});
只需向所有评分元素添加一个 css class,例如 scale
,然后执行以下操作:
$(function() {
$('.scale').hover(function() {
var $previous = $(this);
while ($previous.length && $previous.hasClass('scale')) {
$previous.css('background-color', 'yellow');
$previous = $previous.prev();
}
}, function() {
var $previous = $(this);
while ($previous.length && $previous.hasClass('scale')) {
$previous.css('background-color', '');
$previous = $previous.prev();
}
})
});