2010-06-13 4 views
0

Я написал простой скрипт jQuery, который изменяет хэш-тег ссылки. Я делаю это, потому что я использую комментарии IntenseDebate в Wordpress, но ссылка комментариев по-прежнему ссылается на замененный идентификатор старых комментариев. Я использую jQuery, чтобы, если javascript включен, пользователь может щелкнуть ссылку на комментарии, и это приведет их к комментариям IntenseDebate. Если он не включен, он будет отсылаться к традиционным комментариям (потому что IntenseDebate требует javascript для работы).Код jQuery не выполняется, когда DOM готов

Проблема, в которой я ложь в этом скрипте, чтобы изменить хэш-тег в конце ссылки. В настоящее время URL-адрес "someurl.com/ #respond", но мне нужен сценарий, чтобы изменить его на "someurl.com/ #comments". Случается, что скрипт не работает, однако я считаю, что мой синтаксис верен, поэтому я решил попробовать копировать и вставлять код в консоль Firebug, а код выполнен отлично. Я мог видеть, что ссылка, которую я пыталась изменить, была правильной, и я мог щелкнуть по ней, и это сработало, как я хотел. Поэтому я не понимаю, почему код не выполняется, когда он должен. Я использую $ (document) .ready(), и у меня есть другой jQuery на странице, который выполняется просто отлично. Я даже протестировал его на простой HTML-странице вдали от всех проблем, которые могут быть вызваны Wordpress, и я получил тот же результат. Кто-нибудь знает, почему это может произойти?

Вот мой код (я использую noConflict потому что Wordpress использует другие структуры):

jQuery.noConflict(); 
jQuery(document).ready(function($) { 
$("a[href$='respond']").each(function() { 
    this.href = this.href.replace("respond", "comments"); 
}); 
})(jQuery); 

Большое спасибо за вашу помощь!

ответ

3

Вы призываете результат jQuery(document).ready(), который даст вам ошибку типа, вы ищете этот шаблон:

(function ($) { 
    // inside this function, you can use `$` 
    $(document).ready(function() { 
    $("a[href$='respond']").each(function() { 
     this.href = this.href.replace("respond", "comments"); 
    }); 
    }); 
})(jQuery.noConflict()); 

В приведенном выше коде вы объявляете анонимную функцию, которая немедленно вызывается, передавая результат от jQuery.noConflict() как аргумент $ этой функции.

+0

А, спасибо, этот код не вызывает ошибки типа Firebug. Однако он не выполняется так же, как мой. Когда страница загружается, ничего не меняется, но если я вставляю ее в консоль и запускаю ее, она отлично работает. –

1

Вам не нужно передавать аргументы при вызове .ready(). jQuery передает объект jQuery в качестве начального параметра, когда он вызывает вашу функцию.

jQuery.noConflict(); 
jQuery(document).ready(function($) { 
    $("a[href$='respond']").each(function() { 
     this.href = this.href.replace("respond", "comments"); 
    }); 
}); 

http://api.jquery.com/ready/

0

Внутренняя линия должна быть:

jQuery.noConflict(); 
jQuery(document).ready(function($) { 
    $("a[href$='respond']").each(function() { 
     $(this).attr("href", $(this).attr('href').replace("respond", "comments")); 
    }); 
}); 

браузер не любит литье заменить непосредственно на this.href;

Редактировать: или, может быть, это был мой браузер с шипением.

Смежные вопросы