2012-04-30 2 views
1

Я использую код слайдера фотографии отсюда: http://tympanus.net/codrops/2010/10/07/slider-gallery/ и пытаюсь изменить его, чтобы ссылка под изображениями загружалась в новом окне.jQuery - выберите класс, кроме определенного ребенка

Например:

<div class="content"> 
<div><a href="#"><img src="http://imageurl" alt="largeimageurl" /></a></div> 
<div class="caption"><a target="_blank" href="image.php?id=someid&svc=somesvc" rel="nofollow">More Info</a></div> 
</div> 

Я пробовал различные вещи с файлом JavaScript, который в настоящее время гласит:

$fp_content_wrapper.find('.content').bind('click',function(e){ 
    var $current = $(this); 
    //track the current one 
    current = $current.index(); 
    //center and show this image 
    //the second parameter set to true means we want to 
    //display the picture after the image is centered on the screen 
    centerImage($current,true,600); 
    e.preventDefault(); 
    }); 

Что мне нужно сделать, это изменить эту первую строку так что он выбирает как обычно, но ничего не применимо к div заголовка, в котором есть ссылка, так что он ведет себя как обычно.

Я знаю, что есть похожие вопросы о SO, но я пробовал большинство из предложенных. У меня нет большого опыта работы с JS вообще, поэтому мне легко было бы ошибиться.

Цените любую помощь!

+1

Каков ваш html-код для заголовка div? Если вы имеете в виду id, вы можете сделать '$ fp_content_wrapper.find ('. Content'). Not ('# caption'). Bind ('click', function (e) {' или изменить '#' для '.' если это класс –

+0

Код находится в первом блоке кода в вопросе, вложенном в содержимое div. Я попытался разместить субтитр div вне этого, но он вызывает больше работы с стилем. В итоге может быть проще сделать это в конце концов. –

+0

Ты так прав, как я этого не видел! –

ответ

1

Попробуйте это:

$fp_content_wrapper.find('.content>*:not(.caption)').bind('click',function(e) ..... 

Что происходит, что вы выбирали тег контента, вместо того, чтобы вы хотели, чтобы выбрать то, что было внутри него, для чего с классом .csption исключением. '>' означает элемент непосредственно под и '*' означает выбор всех. То, что он переводит, это «выбрать все прямо под .content, которое не является классом .caption».

Если вы продолжаете использовать jquery, стоит изучить селектор.

Удача

+0

Блестящий, работал так, как это предполагалось (стыдно, что нам пришлось демонстрацию системы сегодня утром, когда он не работал: - /) Определенно оцените ответ, хотя, это то, что я могу использовать в будущих реализациях этого. Еще раз спасибо! Не могли бы вы немного объяснить изменения, чтобы я понял, что это значит? –

+0

Я включил объяснение для вас – MrJD

+0

Большое спасибо, я понимаю это намного больше. –

1

Try:

$fp_content_wrapper.find('.content:not(.caption)').bind("click", ... 
+0

Пробовал это, но, к сожалению, не повлиял на ссылку подписи. Оба по-прежнему запускают большую версию изображения. –

0

Попробуйте Джеймс

$fp_content_wrapper.find('.content').bind('click',function(e){  
    if(!$(this).attr('class')) 
    { 
    var $current = $(this);  
    //track the current one  
    current = $current.index();  
    //center and show this image  
    //the second parameter set to true means we want to  
    //display the picture after the image is centered on the screen  
    centerImage($current,true,600);  
    e.preventDefault(); 
    } 
}); 

Существует аккуратнее способ сделать это, но это следует делать. Это должно гарантировать, что только функция div, не имеющая класса, запускает функцию. Очевидно, будьте осторожны или измените логику, если вы хотите использовать класс на другом div.

Приветствия

EDIT:

После просмотра кода снова вы можете также проверить гиперссылку в DIV, чтобы проверить, имеет ли оно alt атрибут или то, что атрибут alt есть. Это будет более конкретный тест.

+0

Спасибо за это - пока не работает. Я думаю, что функция должна применяться к основному содержимому div, а не только к внутреннему div (без класса). Каков код, который будет похож на этот, чтобы проверить, равен ли класс классу «подпись»? Итак, if (class! = 'Caption') {code} в виде псевдокода –