JQuery .attr не работает в Chrome - PullRequest
       4

JQuery .attr не работает в Chrome

0 голосов
/ 08 февраля 2011

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

$(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, и он работает до некоторой степени, но затем по какой-то причине он выбирает только первый экземпляр регулярного выражения.

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

Ответы [ 6 ]

4 голосов
/ 08 февраля 2011

Что бы ни делал этот плагин, он выглядит ужасно медленно.Я бы порекомендовал выбрать все узлы изображения и затем отфильтровать их с помощью 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();
});

Демо : http://www.jsfiddle.net/snMCM/

Тест производительности : http://jsperf.com/regex-vs-jquery-filter

3 голосов
/ 08 февраля 2011
Кроме 1000 * 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 голосов
/ 14 мая 2011

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

        $(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"
                        });
        });
0 голосов
/ 08 февраля 2011

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

var $imgs = $('img').filter(function(){return this.id.match(/^P\d\d\d\d\d/);});
$imgs.attr("onmouse.......
0 голосов
/ 08 февраля 2011

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

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

0 голосов
/ 08 февраля 2011

Я не уверен, что вы можете прикрепить обработчики javascript, используя attr, но это звучит как очень долгий путь.Дайте этому шанс:

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