数据属性只返回第一个值
Data attribute only returning first value
我试图让我的页面正文在悬停在某些列表项上时改变颜色。每个列表项都有自己的颜色存储在数据属性中,我可以在 chrome 检查器中看到它。代码正在执行我想要的操作,但是当我希望正文成为每个列表项的颜色时,只为每个项目返回列表中的第一个颜色。
HTML:
<ul class="menu">
<?php foreach($page->children() as $subpage): ?>
<li id="tesq" data-color="<?= $subpage->color() ?>">
<a href="<?= $subpage->url() ?>">
<?= html($subpage->title()) ?></a>
</li>
<?php endforeach ?>
</ul>
jQuery:
$(function() {
$('li').hover(function() {
$("body").css('backgroundColor', function () {
return $("#tesq").data('color')
});
}, function() {
$("body").css('backgroundColor', 'lightgrey')
});
})
非常感谢任何帮助
在您当前的代码中,您试图从整个集合中获取数据属性,因此它将 return 集合中第一个元素的数据属性值。
此外,对一组元素使用 class
而不是 id
(id 在上下文中应该是唯一的 - $("#tesq")
将仅 select第一个元素)。
所以根据悬停的元素来做,你可以在事件处理程序回调中使用 this
来引用元素。
PHP :
<ul class="menu">
<?php foreach($page->children() as $subpage): ?>
<li class="tesq" data-color="<?= $subpage->color() ?>">
<a href="<?= $subpage->url() ?>">
<?= html($subpage->title()) ?></a>
</li>
<?php endforeach ?>
</ul>
JQUERY :
$(function() {
$('.tesq').hover(function() {
var $this = $(this);
$("body").css('backgroundColor', function () {
return $this.data('color')
});
}, function() {
$("body").css('backgroundColor', 'lightgrey')
});
})
回调在这里完全没有必要,你可以避免它。
$(function() {
$('.tesq').hover(function() {
$("body").css('backgroundColor', $(this).data('color'));
}, function() {
$("body").css('backgroundColor', 'lightgrey')
});
})
我试图让我的页面正文在悬停在某些列表项上时改变颜色。每个列表项都有自己的颜色存储在数据属性中,我可以在 chrome 检查器中看到它。代码正在执行我想要的操作,但是当我希望正文成为每个列表项的颜色时,只为每个项目返回列表中的第一个颜色。
HTML:
<ul class="menu">
<?php foreach($page->children() as $subpage): ?>
<li id="tesq" data-color="<?= $subpage->color() ?>">
<a href="<?= $subpage->url() ?>">
<?= html($subpage->title()) ?></a>
</li>
<?php endforeach ?>
</ul>
jQuery:
$(function() {
$('li').hover(function() {
$("body").css('backgroundColor', function () {
return $("#tesq").data('color')
});
}, function() {
$("body").css('backgroundColor', 'lightgrey')
});
})
非常感谢任何帮助
在您当前的代码中,您试图从整个集合中获取数据属性,因此它将 return 集合中第一个元素的数据属性值。
此外,对一组元素使用 class
而不是 id
(id 在上下文中应该是唯一的 - $("#tesq")
将仅 select第一个元素)。
所以根据悬停的元素来做,你可以在事件处理程序回调中使用 this
来引用元素。
PHP :
<ul class="menu">
<?php foreach($page->children() as $subpage): ?>
<li class="tesq" data-color="<?= $subpage->color() ?>">
<a href="<?= $subpage->url() ?>">
<?= html($subpage->title()) ?></a>
</li>
<?php endforeach ?>
</ul>
JQUERY :
$(function() {
$('.tesq').hover(function() {
var $this = $(this);
$("body").css('backgroundColor', function () {
return $this.data('color')
});
}, function() {
$("body").css('backgroundColor', 'lightgrey')
});
})
回调在这里完全没有必要,你可以避免它。
$(function() {
$('.tesq').hover(function() {
$("body").css('backgroundColor', $(this).data('color'));
}, function() {
$("body").css('backgroundColor', 'lightgrey')
});
})