У меня есть следующий HTML:
<div id="bullets">
<ul id="intrebari">
<li> <img src="images/bullet.png" class="li-icon"> <a href="#"> Frequently Asked Questions </ a> </ li>
<li> <img src="images/bullet.png" class="li-icon"> <a href="#"> custumer Support </ a> </ li>
<li> <img src="images/bullet.png" class="li-icon"> <a href="#"> custumer Login </ a> </ li>
</ ul>
</ div>
Используя JQuery, я хочу изменить изображение каждого отдельного <li>
при наведении на него мыши. Пока я управляю этим:
$(document).ready(function() {
$('#intrebari>li a').mouseover(function() {
$(this).css('color: red')
$('li > img').attr('src', 'images/bulletactive.png');
});
});
Но при этом он меняет изображение на всех <li>
Я знаю, что это может быть дюна
Может кто-то помочь
Ваш $('li > img')
возвращает все изображения, которые являются .attr()
элементами li
и .attr()
применяется ко всем выбранным изображениям. Существуют различные способы сделать это.
Поскольку ваш img находится непосредственно перед вашим якорем, вы можете получить его с помощью .prev()
Попробуй это
$(document).ready(function() {
$('#intrebari>li a').mouseover(function() {
$(this).css('color: red')
$(this).prev().attr('src', 'images/bulletactive.png');
});
});
Если вы собираетесь вставлять какие-либо элементы между img и anchor, это не сработает. альтернативное решение было бы
$(this).closest("li").children("img").attr('src', 'images/bulletactive.png');
Попробуйте закрыть свои теги img следующим образом: <img src="images/bullet.png" class="li-icon"/>
Ты можешь попробовать
HTML
<div id="bullets">
<ul id="intrebari">
<li> <img src="http://placehold.it/20/20" class="li-icon" /> <a href="#"> Frequently Asked Questions </a> </li>
<li> <img src="http://placehold.it/20/20" class="li-icon" /> <a href="#"> custumer Support </a> </li>
<li> <img src="http://placehold.it/20/20" class="li-icon" /> <a href="#"> custumer Login </a> </li>
</ul>
</div>
Jquery
$('#intrebari>li a').mouseover(function() {
$(this)
.parents('#intrebari')
.find('a').css('color','black')
.prev().attr('src','http://placehold.it/20/20')
.end().end().end()
.css('color','red').prev().attr('src','http://placehold.it/30/30');
});
Попробуй это. Я применил это в своем коде и его работе.
$('li').mouseover(function(){
var $this = $(this);
// img over
$img = $this.find('img').attr('src');
bg = $img.replace(/^url\(['"]?/,'').replace(/['"]?\)$/,'').replace(/^.*\/|\.[^.]*$/g, '');
$url ="pathToYourImage\bullet.png";
$this.find('img').attr('src', '');
$this.find('img').attr('src','"+$url+"');
});
Надеюсь, что это работает.
Добавлено событие удаления jQuery мыши
$('#intrebari>li a').mouseover(function() { console.log('over')
$(this).css('color','red')
$(this).prev().attr('src', 'https://cdn4.iconfinder.com/data/icons/ionicons/512/icon-ios7-arrow-left-128.png');
});
$('#intrebari>li a').mouseleave(function() { console.log('out')
$(this).css('color', 'blue')
$(this).prev().attr('src','https://cdn4.iconfinder.com/data/icons/ionicons/512/icon-ios7-arrow-right-128.png');
});
Это изменение изображения во всех элементах списка из-за селектора $ ('li> img'). Вы должны использовать его следующим образом: $ (this).parent(). Find ('img'). Attr ('src', 'images/bulletactive.png');
Как совет, это проще и быстрее с CSS.