Ответ 1
Я бы сказал, что лучший способ - вычислить его самостоятельно:
var width = $('#someElt').width();
var parentWidth = $('#someElt').offsetParent().width();
var percent = 100*width/parentWidth;
Я пишу плагин jQuery, и что-то, что мне нужно, это определить ширину элемента, который указывает пользователь. Проблема в том, что .width() или .css('width') всегда будут сообщать точные пиксели, даже если разработчик назначил их, например. ширина: 90% с CSS.
Есть ли способ, чтобы jQuery выводил ширину элемента в px или% в зависимости от того, что разработчик дал ему с помощью CSS?
Я бы сказал, что лучший способ - вычислить его самостоятельно:
var width = $('#someElt').width();
var parentWidth = $('#someElt').offsetParent().width();
var percent = 100*width/parentWidth;
Это определенно возможно!
Сначала вы должны скрыть() родительский элемент. Это не позволит JavaScript вычислять пиксели для дочернего элемента.
$('.parent').hide();
var width = $('.child').width();
$('.parent').show();
alert(width);
См. мой пример.
Я думаю, вы можете напрямую использовать доступ к объекту stylesheet ('style'). Даже тогда, YMMV браузером. например elm.style.width
.
Изменить комментарий Peter:: Я не хочу "получать%". По вопросу:
Мне нужно иметь возможность определять ширину элемента, который пользователь указывает... [есть способ] вывести ширину элемента в px или% в зависимости от того, что разработчик дал ему с помощью CSS?
Таким образом, я предоставил альтернативу для получения "необработанного" значения CSS. Это, похоже, работает на FF3.6. YMMV в другом месте (ответ netadictos может быть более переносимым/универсальным, я не знаю). Опять же, он не хочет "получать%".
Способ сделать это задокументирован в этом вопросе stackoverflow.
Как вы читаете значения правил CSS с помощью JavaScript?
Единственное, что вам нужно знать, - это то, что таблица стилей - это класс или цикл через все таблицы стилей. Следующая функция предоставляет вам все функции класса, было бы легко сделать регулярное выражение для извлечения функции, которую вы ищете.
function getStyle(className) {
var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules
for(var x=0;x<classes.length;x++) {
if(classes[x].selectorText==className) {
(classes[x].cssText) ? alert(classes[x].cssText) : alert(classes[x].style.cssText);
}
}
}
getStyle('.test');
В моих целях я экстраполировал ответ MДΓΓ БДЛЛ.
Имейте в виду, я работаю только с процентами.
var getPercent = function(elem){
var elemName = elem.attr("id");
var width = elem.width();
var parentWidth = elem.offsetParent().width();
var percent = Math.round(100*width/parentWidth);
console.log(elemName+" width = "+percent+"%");
}
getPercent($('#folders'));
getPercent($('#media'));
getPercent($('#player'));
Если вы хотите переназначить процент первоначальных элементов на новый процент, рекомендуется определить это значение в CSS и каким-то образом изменить идентификатор элементов (класс, идентификатор и т.д.), чтобы отразить новое определение CSS, Это не всегда применяется, если новая процентная переменная должна быть переменной.
.myClass{
width:50%;
}
.myNewClass{
width:35%;
}
Добавление удаления с помощью этого (или другого) метода:
$('.myClass').removeClass('myClass').addClass('myNewClass');
чтобы сделать его более jqueryish
добавить это
$.fn.percWidth = function(){
return this.outerWidth() / this.parent().outerWidth() * 100;
}
а затем используйте
$(selector).percWidth()
это возвращает процентное значение без знака%, поэтому вы можете использовать его в вычислениях
Если его набор использует тег стиля, вы можете просто использовать .prop()
например $('. selector'). prop ('style'). width.replace('%', '')
Недавно я столкнулся с этой проблемой, и я действительно не хотел делать "лишнюю" работу, которая получала ширину родителя и вычисляла процент.
После нескольких быстрых попыток это то, что у меня есть:
$($($(table).find('tr')[0]).find('td')).each(function (i, e) {
var proptW = $(e).prop("style").width;
console.log(proptW);
});
Итак, я думаю, что это самый близкий способ использования jQuery для получения значения ширины элемента на основе того, что разработчик указал в css.
Как вы можете видеть, у меня есть таблица, и мне нужно получить ширину для каждого столбца.
Мы не можем получить указанное значение разработчика (DSV) напрямую с помощью метода jQuery, но в сочетании со встроенным методом JavaScript это всего на один шаг от получения DSV.
Поскольку DSV находится в Style, а Style является свойством элемента, поэтому мы можем использовать метод jQuery: prop() для его получения. Этот метод возвращает объект стиля (например, стиль), так что мы можем вызвать sty.width, чтобы получить DSV напрямую.
Это не чистый способ jQuery для его получения, но он достаточно прост и работает для меня.
Надеюсь, это поможет.
Приветствия,