Найти элементы, размер шрифта которых больше указанного - PullRequest
4 голосов
/ 23 мая 2011

Я пытаюсь определить оператор JQuery для поиска элементов, которые имеют (или соответственно меньше) font-size, чем входное значение.

Возможные значения ввода:

"12px"
"14pt"
"120%"
and so on...

Мой первый подход - скорее проект, потому что он не может работать таким образом.Но, возможно, у вас есть идеи, как достичь решения.Вот что у меня есть (входное значение исходит из другого места и является переменной):

$('*').filter(function() {
    return $(this).css('font-size') > '12px';
})

Кто-нибудь?

Обновление

Меня попросили объяснить, почему японадобится что-то вроде этого.Я пишу API с использованием Selenium2 на Java, который способен находить элементы и взаимодействовать с ними более простым и надежным способом.Эта функция позволит мне писать код, подобный browser.find().titleElements(), который выбирает все теги h1, h2, ..., но также и элементы, размер шрифта которых больше, чем средний размер текста на странице.

Каркас также предоставляет функции для выбора элементов, которые визуально расположены близко друг к другу или в определенном направлении:

HtmlElement nameLabel = browser.find().labelElement("name");
HtmlElement nameInput = browser.find().closestInputElement(nameLabel);
nameInput.below("tos").select();

Ответы [ 3 ]

4 голосов
/ 23 мая 2011

Я сделал небольшой плагин, который может принимать все параметры, которые вы запрашиваете.Понятия не имею, насколько это точно, так как я сделал это в спешке.pt будет определенно отключено, если ваш DPI будет отличаться от 72.

Код плагина

(function($){
    $.fn.filterByFontSize = function(size){
        // Local scope vars
        var relative = false,
            matches = size
                .toString()
                .match(/^\d+(?:\.\d+)?(pt|em|%)$/i);

        // Parse size
        size = parseFloat(size, 10);

        // Check matches
        if (matches !== null) {
            switch (matches[1]) { 
                case "pt":
                    size = size*96/72;
                break;
                case "em":
                    relative = true;
                break;
                case "%":
                    relative = true;
                    size = (size/100)+0.01;
                break;
            }
        }

        // Filter elements accordingly
        return this.filter(function(){
            var $this = $(this),
                thisSize = parseInt(
                    $this.css("font-size"), 10);
            if (relative) {
                var parent = $this.parent();
                if (parent[0] === document) {
                    parent =  $(document.body);
                }
                var parentSize = parseInt(
                        parent.css("font-size"), 10);
                return parentSize*size < thisSize;
            } else {
                return thisSize > size;
            }
        });

    };
})(jQuery);

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

var bigTextElements = $("h1,h2,h3,p").filterByFontSize("24px");

Вы можете попробовать это в этом тестовом примере на jsFiddle .

Дополнительные кредиты конвертеру за помощь в оптимизации.

0 голосов
/ 23 мая 2011

нужно разобрать размер шрифта ...

попробуйте так ...

$('*').filter(function() {
    return parseInt($(this).css('font-size')) > '12px';
})
0 голосов
/ 23 мая 2011

Вы можете использовать parseint примерно так:

function greaterThan(e, size = 12) {
    if (parseInt(e.css('font-size')) > size) {
        return true;
    }
    return false;
}

и называть это так:

var isBigger = greaterThan($(this));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...