Код jQuery работает в Firebug, но не сам по себе

У меня сейчас довольно головокружительная проблема. Я пытаюсь изменить хэш-тег ссылки в конце с «ответить» на «комментарии» с помощью jQuery. У меня есть простой скрипт, который должен это сделать, но он не работает. Ссылка не меняется. Однако Firebug не показывает ошибок, и когда я запускаю код в консоли Firebug, он работает именно так, как я и предполагал. Почему это не работает само по себе? У кого-нибудь есть решение, я на грани ума с этим.

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

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


person Ben Kulbertis    schedule 13.06.2010    source источник
comment
Где вы размещаете этот код на своей странице? И используете ли вы какие-либо другие фреймворки? Выполняется ли другой код? Вы пробовали свести к минимуму?   -  person meder omuraliev    schedule 14.06.2010
comment
Это работает для меня, что-то еще происходит за пределами опубликованного кода: jsfiddle.net/akgEH. вам нужен noConflict? Это становится очень коротким, если вы этого не сделаете.   -  person Nick Craver    schedule 14.06.2010
comment
@meder Я пробовал код под редактируемым элементом, а также в голове. Ни один из них не работал. Да, используются другие фреймворки, но у меня не должно быть проблем, так как я использую noConflict. Другой код jQuery выполняется без проблем. Нет, я не свернул его, это поможет? @Ник Это интересно. Я попробовал это на отдельном html-документе, где все, что было, это ссылка и код в заголовке, и он дал те же результаты, что и на моем сайте. Да, к сожалению, мне нужен noConflict, я использую Wordpress и использую плагины, которые требуют других фреймворков.   -  person Ben Kulbertis    schedule 14.06.2010
comment
Можете ли вы дать нам ссылку на указанную страницу с проблемой? Или скопируйте его на jsfiddle. Это может быть какой-то Prototype, расширяющий код из другой библиотеки, который искажает работу jQuery .each или готового кода документа, или обработчики событий могут перезаписывать друг друга.   -  person meder omuraliev    schedule 14.06.2010
comment
Он находится на главной странице этого сайта: codezroz.com Проблема заключается в ссылке на комментарий в разделе последнего поста.   -  person Ben Kulbertis    schedule 14.06.2010
comment
` console.log( jQuery(a[href$='respond']).length )` дает мне 0 для домашней страницы, на которую вы ссылаетесь. Вы уверены, что проблема на главной странице?   -  person meder omuraliev    schedule 14.06.2010
comment
Да, это ссылка на номер комментария в разделе последнего поста. И когда я запускаю это, я получаю значение 1.   -  person Ben Kulbertis    schedule 14.06.2010
comment
@Ben - я вижу твою ссылку, но где твой сценарий? Я нигде не могу найти ваш код.   -  person user113716    schedule 14.06.2010


Ответы (3)


Вы используете $(document).load() вместо $(document).ready().

(function ($) {
//---------------v
    $(document).load(function() {    
        $("a[href$='respond']").each(function() {
            $(this).attr("href", $(this).attr('href').replace("respond", "comments"));
        });  
    });
})(jQuery.noConflict());
person user113716    schedule 13.06.2010
comment
Извините, я положил это туда, чтобы посмотреть, будет ли это иметь какое-то значение, и никогда не менял его обратно. Я только что сделал, это не помогает. - person Ben Kulbertis; 14.06.2010
comment
@Ben - У тебя много других сценариев. Не уверен, что они все делают, но меня беспокоит то, что ваш скрипт находится в середине страницы, встроенный в div. Возможно, другой скрипт манипулирует этим элементом и уничтожает ваш код. Не могли бы вы переместить свой сценарий на head или в конец страницы и попробовать? - person user113716; 14.06.2010
comment
@patrick - я пробовал это раньше, но я полагаю, что нет ничего плохого в том, чтобы попробовать еще раз. Но, как я уже говорил, я попробовал это на простой странице, на которой не было ничего, кроме ссылки и кода в заголовке, и результат был тот же. - person Ben Kulbertis; 14.06.2010
comment
@Ben - Есть ли шанс, что ссылка генерируется динамически с помощью какого-то другого javascript? Если это так, возможно, его еще нет на странице, когда ваш скрипт запускается. - person user113716; 14.06.2010
comment
@patrick - он генерируется PHP, но его нужно обслуживать до загрузки страницы, я прав? Я также пытался применить задержку, на всякий случай, если что-то подобное вызывало это, однако это не помогло. - person Ben Kulbertis; 14.06.2010
comment
@Ben - Да, не имеет значения, если это через PHP. Думал, может быть, это сделал какой-то другой javascript, но если вы использовали setTimeout(), то, вероятно, это не так. Ради интереса попробуйте использовать селектор contains вместо ends with: a[href*='respond']. Ваш код отлично работает на тестовой странице. Происходит что-то еще. Я вернусь примерно через час. - person user113716; 14.06.2010
comment
@patrick - взгляните на это. codezroz.com/test.html Это тестовая страница, на которую я ссылался. Это просто код и идентичная ссылка, но он делает то же самое. Вот почему мне кажется, что это ошибка в коде, но я не могу ее найти. - person Ben Kulbertis; 14.06.2010
comment
@ Бен - ... еще кое-что. Подойдет ли вам любой jQuery? Попробуйте это в своем методе ready(): alert($().jquery); Должен предупредить версию jQuery, которую вы используете. - person user113716; 14.06.2010
comment
@patrick - Спасибо, чувак, я ценю всю помощь. Селектор contains не имеет значения. - person Ben Kulbertis; 14.06.2010
comment
@Ben - я буквально вырезал и вставил код с твоей тестовой страницы, а также элемент <a>. У меня работает нормально. Я скоро вернусь. - person user113716; 14.06.2010
comment
@Ben. Проблема с вашей тестовой страницей в том, что открывающий тег javascript написан с ошибкой javscript. Вернуться. - person user113716; 14.06.2010
comment
@patrick - Конечно, не торопитесь. Хотя, возможно, я только что нашел что-то. Кажется, ни один из этих кодов не выполняется. Когда я вставляю код предупреждения в метод ready() и перезагружаю страницу, окно предупреждения не отображается. Но у меня есть другой код jQuery, работающий на странице, который отлично работает. По крайней мере, это немного сужает круг. - person Ben Kulbertis; 14.06.2010
comment
@patrick Ошибочное написание javascript было всей проблемой. Большое спасибо за вашу помощь, Патрик. Мне жаль, что проблема была просто опечаткой. Большое спасибо за вашу помощь. - person Ben Kulbertis; 14.06.2010
comment
@Ben - Похоже, на главной странице это было написано правильно. Ну в любом случае не проблема. :o) Рад, что теперь у вас все работает. - person user113716; 14.06.2010

Ваш код должен работать нормально, но ваш тег скрипта имеет неверный формат. У вас text/javscript вместо text/javascript. Кроме того, вы можете немного оптимизировать свой код:

<script type="text/javascript">
  jQuery(document).ready(function($){
    $("a[href$='respond']").attr("href", function(index, attr){
      return attr.replace("respond", "comments");
    });
  }).noConflict();
</script>
person Doug Neiner    schedule 14.06.2010
comment
Вау, разве я не чувствую себя тупым... и действительно смущенным. Спасибо Дуг. После борьбы с этим в течение 8 часов ... это было потому, что я опечатал javascript. Спасибо за помощь и за оптимизированный код! - person Ben Kulbertis; 14.06.2010
comment
Не торопитесь с ответами, но разве вы не должны выбрать человека, который помогал вам в течение последнего часа? - person meder omuraliev; 14.06.2010
comment
Рад помочь! Я открою вам секрет: @Jonathan Sampson (модератор здесь, на SO) скинул мне немного кода, который он устранял несколько месяцев назад, и он не смог найти ошибку. У него было <script type="text/css"> ха-ха. Так что вы не одиноки :) Удачи на вашем сайте! - person Doug Neiner; 14.06.2010
comment
@meder - Разве я не должен отметить человека, который нашел ответ? И я извинился перед Патриком и искренне сожалею о своей ошибке и на 100% благодарен за его помощь. - person Ben Kulbertis; 14.06.2010
comment
@Ben `Проблема с вашей тестовой страницей заключается в том, что в открывающем теге javascript написано javscript с ошибкой. Вернуться. – patrick 13 минут назад`, тогда как на этот вопрос был дан ответ 10 минут назад. - person meder omuraliev; 14.06.2010
comment
@meder - Боже мой, я никогда этого не видел. Извините, Дуг, но мне пришлось изменить ответ. Я уверен, вы понимаете. Спасибо, Медер, что указал на это, я не хочу никого обидеть. @Doug - я не верю, что ты украл ответ, и я очень благодарен за переписанный код. - person Ben Kulbertis; 14.06.2010
comment
@Doug - я не думаю, что вы сорвали его ответ, я думаю, что вы оба решили это независимо. Я просто указываю, что он нашел его раньше вашего, и хотя вы нашли его быстрее, чем он, это не отнимает у него все время, которое он уделял отладке. По правде говоря, вы оба должны быть выбраны. - person meder omuraliev; 14.06.2010
comment
@ Бен, не беспокойся, мне не нужны очки репутации, просто рад, что ты понял это! - person Doug Neiner; 14.06.2010
comment
Ну тогда извините за беспокойство. - person meder omuraliev; 14.06.2010
comment
@Doug - Спасибо за понимание, Дуг. Я очень ценю это! @meder - Спасибо за попытку помочь Патрику. Он заслужил это. - person Ben Kulbertis; 14.06.2010
comment
@meder Вы, конечно, делаете совершенно правильное замечание. Извините, что расстроился и обругал вас :( Я удалил большинство своих комментариев, чтобы меньше выглядеть придурком :) - person Doug Neiner; 14.06.2010
comment
@Doug - +1 Похоже, пока меня не было, здесь был шторм. ;o) Честно говоря, я был бы счастлив, если бы вы получили признание, просто чтобы увидеть, как это выяснилось, когда я вернулся. Это начало сводить меня с ума. :о) - person user113716; 14.06.2010
comment
@meder - Спасибо за ваши усилия. Я ценю это. :о) - person user113716; 14.06.2010
comment
@patrick Ха-ха... Да, я знаю лучше, но я все равно спорил :) Глупый я. Спасибо за приятный комментарий! - person Doug Neiner; 14.06.2010

Почему бы просто не:

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

Если вы передаете функцию конструктору jQuery, он добавляет ее к прослушивателям DOM Ready и автоматически передает себя в качестве аргумента.

person Sebastián Grignoli    schedule 14.06.2010