Выбор элементов по свойству CSS в JavaScript - PullRequest
3 голосов
/ 27 февраля 2012

Можно ли выбрать элементы DOM по их свойству CSS?

Например:

awsome_function ({'background-color' : '#0cf'});
// return all object, which's background-color css attribute value is '#0cf'

awsome_function (['background-color']);
// return all object, which has background-color css attribute 

awsome_function (['-my-special-cssattribute'])
// return all object, which has '-my-special-cssattribute' css attribute 

Я знаю, что можно выбирать элементы, используя метод jQuery each, например:

$('*').each(function(){
   if($(this).css('-my-special-cssattribute')) {
      /* do something */
   }
})

Однако это может быть медленно и не элегантно. Есть ли более крутой способ сделать это?

Ответы [ 4 ]

4 голосов
/ 27 февраля 2012

Я бы использовал пользовательский селектор:

$.extend($.expr[":"], {
    foo: function (e) {
        return $(e).css('background-color') == '#0cf';
    }
});

Использование:

alert($('div:foo').size()); //get the count of all the divs that matches the selector
1 голос
/ 27 февраля 2012

Однако это может быть медленным и не элегантным.Есть ли более крутой способ сделать это?

Это медленно.Это нелегально.Не делай этого.Выберите ваши элементы с идентификатором или в конце концов с классом, но никогда так.Серьезно.

0 голосов
/ 27 февраля 2012

Ответ: Нет способа сделать это по уважительным причинам. Это будет очень медленно, и это, конечно, хуже, чем нелегальное.

Персонально, если я однажды увижу одного из моих разработчиков, я убью его и / или попрошу моего начальника немедленно его заменить.

Используйте классы или намного лучшие идентификаторы! Если вы не можете, проблема заключается в логике структуры вашего приложения.

0 голосов
/ 27 февраля 2012

Я предлагаю добавить разные классы с разными цветами фона. Тогда вы можете выбрать их.

Или вы можете попробовать .css () http://api.jquery.com/css/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...