jQuery.attr ('src') заменить не работает в FF - PullRequest
1 голос
/ 27 января 2012

Странный вопрос. Этот код отлично работает в Chrome / IE. Однако это не работает в FF 3.6 по некоторым причинам. Консоль не показывает ошибок JS.

Предполагается поискать все изображения с определенным атрибутом src и при наведении курсора заменить src (мне известны другие подходы, такие как css hover и т. Д., Есть причина, по которой я использую эту технику - это не просто опрокидывание, это анимированные видео превью).

$("img[src*='libraries/phpthumb/phpThumbYT.php']").each(function(){
var t=$(this);
var src1= t.attr('src'); // initial src
var old_src = src1.substring(src1.lastIndexOf('media/'), src1.lenght);; // extract old source attr    
var media_id = old_src.substring(6,8); // extract media ID (directory name)
if ( old_src.indexOf("animation=1") != -1 )
{
    t.hover(function(){
        // on hover
        $(this).attr('src', 'libraries/phpthumb/phpThumbYT.php?w=131&h=92&far=C&iar=1&sfn=3&zc=C&f=gif&src=http://domain.name/media/'+media_id+'/preview.gif');  
    }, function(){
       // on rollout
        $(this).attr('src', src1);
    });
}
});

Я подозреваю, что может быть проблема с селектором, может быть? Есть идеи?

1 Ответ

1 голос
/ 27 января 2012

Наконец-то нашел решение.

Проблема заключалась в том, что src1.lenght дал значение 'undefined'.Несмотря на то, что Алекс предложил источник этой проблемы, документация по W3C показала длину как допустимое свойство строки.

Однако сама проблема, очевидно, была вызвана другой обработкой значения 'undefined' в src1.substring(src1.lastIndexOf('media/'), src1.lenght);. Chrome и IE принял значение 'undefined' просто как отсутствующее, поэтому строка была проанализирована до конца.Однако в FF функция подстроки не смогла полностью вернуть всю строку.

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

Ниже приведен окончательный код, который работает в Chrome + IE + FF.

$("img[src*='libraries/phpthumb/phpThumbYT.php']").each(function(){
var t=$(this);
var src1= t.attr('src'); // initial src
var old_src = src1.substring(src1.lastIndexOf('media/')); // extract old source attr    
var media_id = old_src.substring(6,8); // extract media ID (directory name)
media_id = media_id.replace('/',''); // trim '/' from the end of media_id in case the ID is < 10
if ( old_src.indexOf("animation=1") != -1 )
{
    t.hover(function(){
        // on hover
        $(this).attr('src', 'libraries/phpthumb/phpThumbYT.php?w=131&h=92&far=C&iar=1&sfn=3&zc=C&f=gif&src=http://slovoprekazdeho.sk/media/'+media_id+'/preview.gif');  
    }, function(){
       // on rollout
        $(this).attr('src', src1);
    });
}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...