Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Поиск по стилю (https://javascript.ru/forum/jquery/8680-poisk-po-stilyu.html)

kidar2 08.04.2010 19:00

Поиск по стилю
 
Привет.
Не подскажете как получить элементы страницы со стилем
position: absolute ? Нигде не смог найти ничего подобного...

e1f 08.04.2010 19:38

(function(){
var tags = document.getElementsByTagName('*');
var abs_pos = [];
for (var i = tags.length; i--; ) {
    if (getStyle(tags[i], 'position') == 'absolute') {
        abs_pos.push(tags[i]);
    }
}
console.info(abs_pos);
// Get the computed css property
function getStyle(element, cssRule) {
    if (document.defaultView && document.defaultView.getComputedStyle) {
        var value = document.defaultView.getComputedStyle(element, '').getPropertyValue(
            cssRule.replace(/[A-Z]/g, function(match, char) {
                return '-' + char.toLowerCase();
            })
        );
    } else if (element.currentStyle) {
        var value = element.currentStyle[cssRule];
    } else {
        var value = false;
    }
    return value;
}
}());

subzey 08.04.2010 21:16

kidar2,
расскажите, пожалуйста, для чего Вам нужно это.

e1f предложил Вам замечательный код, пожалуй, единственный возможный способ. Но само решение такой задачи больше смахивает на бенчмарк DOM и reflow. :)

e1f 08.04.2010 21:22

subzey, ну, я бы такое сделал, чтобы рекламу по-быстрому кикать букмарком :) можно ограничиться определенными тегами, а-ля iframe -- будет быстрее.

UPD Да, а причем тут reflow? Разве что я допилил много всего в DOM, а потом ВНЕЗАПНО решил проверить position :)

kidar2 08.04.2010 21:28

Долго объяснять зачем это делается.
Я думал, что через jQuery можно без проблем сделать подобный запрос.

e1f 08.04.2010 21:30

kidar2, нельзя. И это правильно.

UPD Если это Ваш проект, то можно:
- отказаться от выставления position в атрибуте style
- выставлять его навешиванием некоторого класса, к примеру pos-abs:
.pos-abs {
  position: absolute;
}

- в этом случае просто выбираем элементы с этим классом.

x-yuri 09.04.2010 00:31

Цитата:

Сообщение от kidar2
Нигде не смог найти ничего подобного...

неспроста

Цитата:

Сообщение от kidar2
Долго объяснять зачем это делается.

если неизвестена задача, как ее можно решить? Ну ладно... как ее можно нормально решить?

Skipp 09.04.2010 09:40

интересно, как разработчик не может знать, какие у него на странице элементы имеют стиль position: absolute или могу иметь?

exec 09.04.2010 10:23

$('*[style*="absolute"]')

e1f 09.04.2010 12:58

exec, а если position не в style, а в css? Не защитано.

Skipp, например, разработчик делает bookmarklet.

Skipp 09.04.2010 13:46

Цитата:

Сообщение от e1f (Сообщение 50761)
Skipp, например, разработчик делает bookmarklet.

Не подумал о них.

subzey 09.04.2010 13:51

exec,
<div style="background: url(absolute.gif)">

:)

exec 09.04.2010 18:53

var a = document.all || document.getElementsByTagName('*'), i = a.length, c = [];
while (i--) if (a[i].style.position == 'absolute') c.push(a[i]);
// c — массив со всеми элементами с абсолютной позицией

Octane 09.04.2010 18:59

exec,
вам уже писали:
Цитата:

Сообщение от e1f
exec, а если position не в style, а в css? Не защитано.

Если абсолютное позиционирование задано в CSS-файле, а не в атрибуте style, то ваш код бесполезен.

sysya 09.04.2010 20:28

а что если position и там и там просматривать. А css() не видит разве в файле и на элементе, мне казалось этот метод всё просматривает...

например так:
...
var pos = $('el').css('position');
...

micscr 10.04.2010 08:38

sysya, конечно просматривает. То есть если в терминах jQuery то имеем:
$('*').filter(
	   function() {
	     if ($(this).css('position') == 'absolute') return true;
		 else return false;
	   }
	 ).css('color', 'red');


Часовой пояс GMT +3, время: 21:58.