2011-02-07 1 views
0

Я использую: regex library (найдено here), чтобы выбрать элементы с идентификаторами, начинающимися с P и имеющими по меньшей мере 5 цифр после. Затем я использую .attr для добавления некоторых атрибутов.JQuery .attr не работает в Chrome

$(document).ready(function() { 
$('img:regex(id,P[0-9][0-9][0-9][0-9]+)').attr("onmouseover", "show\(this\,2\,0\)"); 
$('img:regex(id,P[0-9][0-9][0-9][0-9]+)').attr("onmouseout", "hide\(this\)"); 
}); 

Это работает в Firefox, но не в Chrome. (Еще не тестировал IE.)

Я попытался использовать [0] .setAttribute вместо этого, и он работает в некоторой степени, но по какой-то причине он выбирает только первый экземпляр регулярного выражения.

У кого-нибудь есть более совместимое решение?

+8

Я обычно не делают этого, но ** OMG **. – jAndy

+1

Чувак, вы уверены, что нет более простого способа добиться того, что вы ищете? И кстати, чего вы пытались достичь? –

+1

** P [0-9] [0-9] [0-9] [0-9] + ** также будет соответствовать ** P1234 **. Используйте ** P \ d {5,} ** – kirilloid

ответ

4

Независимо, что плагин делает, это выглядит ужасно медленно. Я бы рекомендовал выбрать все узлы изображений, а затем отфильтровать их с помощью jQuery .filter()help, это должно быть быстрее, и я думаю, что он еще более читабельный. Может выглядеть следующим образом:

$('img').filter(function(index) { 
    return this.id.charAt(0) === 'P' && !isNaN(this.id.slice(1,6)); 
}).hover(function() { 
    $(this).show(); 
}, function() { 
    $(this).hide(); 
}); 

Demo: http://www.jsfiddle.net/snMCM/

Performance бенчмарка: http://jsperf.com/regex-vs-jquery-filter

+0

это так приятно! ;) –

+0

У меня есть предопределенные функции 'show' и 'hide'. Кажется, это вызывает JQuery ([1] (http://api.jquery.com/show/) [2] (http://api.jquery.com/hide/)).Есть ли способ назвать тот, который я предварительно определил? – Julien

+0

@ user607138: ну, я не знаю кода этих методов, но не стоит их вызывать вместо родных версий. Просто замените '$ (this) .show()' на 'show (this);' и т. Д. – jAndy

3

regEx в сторону, вы должны использовать функцию jQuery .hover(), а не функцию .attr(). Я включить функцию .hover(), а также REGEX предоставленной kirilloid

$(document).ready(function() { 
    $('img:regex(id, P\d{5,})').hover(function(){ 
     show($(this), 2, 0); 
    }, function(){ 
     hide($(this)); 
    }); 
}); 
0

Я не уверен, что вы можете прикрепить JavaScript обработчиков с помощью атра, но это звучит как очень длинный способ сделать это. Дайте этот выстрел:

$('img:regex(id,P[0-9][0-9][0-9][0-9]+)').hover(function() { 
    show(this,2,0); 
},function() { 
    hide(this); 
}); 
+0

Почему мы включаем 'click()' в вещи? это простой '.hover()' – Dutchie432

+0

Mind-fart. Отредактировал его примерно через 20 секунд после того, как я опубликовал .. –

0

Я знаю, что на самом деле не ответить на ваш вопрос, но ...

Добавить класс к элементам, которые вы хотите выбрать.

0

Почему бы не просто использовать filter() вместо библиотеки :regex? Это должно работать во всех браузерах. например

var $imgs = $('img').filter(function(){return this.id.match(/^P\d\d\d\d\d/);}); 
$imgs.attr("onmouse....... 
+0

Так же, как и другие, если вы пытаетесь подражать HOVER, используйте метод hover() jQuery. – Neil

0

Попробуйте это: (Работа во всех браузерах)

 $(window).load(function() { 
     //your script or function 

        $("your_html_tag").attr({ 
          width : "your-width", 
          height : "your-height", 
          alt: "Online Teacher" 
         }); 
     }); 

Вместо

 $(document).ready(function() { 
     //your script or function 

        $("your_html_tag").attr({ 
          width : "your-width", 
          height : "your-height", 
          alt: "Online Teacher" 
         }); 
     });