Обмен изображениями с помощью Jquery

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

Я очень новичок в Jquery, поэтому, пожалуйста, извините за этот вопрос. Я пытаюсь поменять фоновое изображение <h1> элемента, когда пользователь нажимает на соответствующую гиперссылку. <a> Теги генерируются динамически, и их может быть «n» в любое время в зависимости от того, сколько изображений задано в таблице SQL.

Мой HTML:

 <div id="feature-image">
    <h1><span>A random heading</span></h1>
</div>

<div id="feature-links">
    <a class="a1" href="#">1</a>
    <a class="a2" href="#">2</a>
    <a class="a3" href="#">3</a>
</div>
  

<span> Теги настроены на отображение: нет

Я написал этот оператор Jquery для запуска, когда пользователь нажимает на гиперссылку в разделе #feature-links. Я пытался присвоить image переменной имя <a> класса тегов (a1, a2, a3) и т. Д., А Затем изменить свойство фонового изображения CSS <h1> image , используя var как часть .jpg. URL.

 <script>
$(function(){
    $('#feature-links a').click(function(){
        var image = $(this).attr("class","");
        $('#feature-image h1').css('background-image','url=('main_'   image   '.jpg')');
    });
});
</script>
  

все мои изображения имеют имена «main_a1.jpg «, «main_a2.jpg » и так далее…

Я не вижу, что я делаю не так или что я пытаюсь сделать (захватить имена классов и т. Д. в vars) на самом деле является хорошей практикой или нет … некоторая помощь была бы очень признательна.

Заранее спасибо!

Редактировать:

Код Jquery после редактирования:

 $(function(){
    $('#feature-links a').click(function(){
        var image = $(this).attr('class');
        $('#feature-image h1').css('background-image','url(images/main_'   image   '.jpg)');
    });             
});
  

Ответ №1:

Измените строку на:

 var image = $(this).attr("class");
  

Я считаю, что указание 2 параметров .attr() функции используется для изменения значения атрибута. Поэтому в вашем случае это изменило бы класс на "" .

Указание одного параметра вернет значение класса

Комментарии:

1. Спасибо, Курт, я отредактировал свой пост выше, чтобы отразить, как теперь выглядит мой код. Это (к сожалению) все еще не работает. Спасибо, что помогли мне!

2. Заметил мою ошибку, это было из-за моей вложенности CSS. Все работает отлично! Спасибо!

Ответ №2:

Лучшим способом вместо использования класса было бы установить href .

Например:

 $('#feature-links a').click(function(e){

    $('#feature-image h1').css({
        'background-image': 'url('   $(this).attr('href')   ')'
    });

    e.preventDefault(); // Stops the standard link behaviour

});
  

Тогда ваши ссылки будут просто ссылаться непосредственно на фоновое изображение:

 <a href="/path/to/image.jpg">1</a>
  

Надеюсь, это поможет 🙂

Комментарии:

1. Мне нравится это решение, я хотел использовать это ранее, но обнаружил, что использую вещи, которые я «вроде» знал, как делать. Несмотря на это, я не могу заставить это работать … запуск через firebug не обнаруживает ошибок, но изображение остается неизменным: (