jquery: добавить #hash ко всем ссылкам, если они еще не созданы? - PullRequest
1 голос
/ 25 февраля 2011

Эй, ребята, следующий код работает нормально ... Я добавляю хеш # wpf-wrapper ко всем ссылкам внутри # wpf-wrapper.

$('#wpf-wrapper a').live('click',function() {
    $(this).attr('href', $(this).attr('href') + "#wpf-wrapper");        
});

Однако, если есть ссылка, которая уже имеет, например, href="#" Я не хочу добавлять еще один к нему. Почему следующий код не работает?

$('#wpf-wrapper a').not('#wpf-wrapper a[href="#"]').live('click',function() 
    $(this).attr('href', $(this).attr('href') + "#wpf-wrapper");        
});

Вдруг ни одна из моих ссылок не добавляет этот # wpf-wrapper?

Ответы [ 2 ]

5 голосов
/ 25 февраля 2011

Этот селектор неправильный

$('#wpf-wrapper a').not('#wpf-wrapper a[href="#"]')

должно быть так, используя атрибут , содержащий селектор с правильным :not() селектором

$('#wpf-wrapper a:not([href*="#"])')
1 голос
/ 25 февраля 2011

Вот еще один способ:

$('#wpf-wrapper a').each(function(){ 
    if( !this.hash ) this.hash = "#wpf-wrapper";
});

Вы можете использовать собственное свойство hash элемента a, чтобы установить его вместо использования метода .attr() jQuery.


Если причина, по которой вы делаете это в обработчике кликов, заключается в том, что .each() не работает, скорее всего, вы запускаете код до загрузки DOM.

Если это так,сделайте это:

$(function() {
    $('#wpf-wrapper a').each(function(){ 
        if( !this.hash ) this.hash = "#wpf-wrapper";
    });
});

Если вы создаете элементы динамически, добавьте хеш при их создании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...