2014-02-04 3 views
22

Я понимаю, что могу использовать jQuery для получения ширины элемента, но мне любопытно; есть ли способ сделать это с помощью AngularJS?Как я могу получить ширину элемента с помощью AngularJS?

+0

Вы можете использовать '.css()' – elclanrs

+0

является CSS дает правильное значение для коробчатых изменения размера ситуаций или с авто рассчитывается ширин? – Lupus

+1

try '$ ('element'). Width();' в js .. заменить 'element' с помощью вашего идентификатора или класса. Ссылка: http://api.jquery.com/width/ –

ответ

37

Родной JS (#id):

document.getElementById(id).clientWidth; 

Родной JS (querySelector (класс, идентификатор, селектор CSS3)):

document.querySelectorAll(".class")[0].clientWidth; 

Подключив это в angular.element:

angular.element(document.getElementById(id)).clientWidth; 
angular.element(document.querySelectorAll(".class")[0]).clientWidth; 

Если вам нужно получить не округленные числа, используйте getBoundingClientRect.

angular.element(document.getElementById(id)).getBoundingClientRect(); 

Некоторые ресурсы по теме:

Если это плывет лодка с точки зрения синтаксиса и не-нужно подключить jQuery в микс, будьте осторожны с кросс-браузерным адом.

+5

Возможно, мне что-то не хватает, но примеры «углового.элемента» не работают для меня. Я думаю, вам нужно * развернуть * элемент DOM из своей оболочки jqLite, чтобы получить доступ к основным DOM-методам/свойствам. то есть 'angular.element (document.getElementById (id)) [0] .clientWidth;', NOT 'angular.element (document.getElementById (id)). clientWidth;' Это, конечно, делает всю вещь 'angleular.element' в этом примере глупо, но нужно сделать что-то подобное, чтобы получить элемент ванильного дома, например, из '' функции '' '' '' '' '' '. –

+0

@ ZachLysobey прав ... по крайней мере в Chrome, вам нужно выбрать первый элемент: angular.element (document.getElementById (id)) [0] .clientWidth – azuax

10

Если вы почесали свою голову, как я, со всеми этими предложениями, и они не работают, я обнаружил, что мне нужно установить тайм-аут. Я не уверен, почему, может быть, потому, что я использую атрибуты материального дизайна для своих div.

setTimeout(function(){ 
    var divsize = angular.element(document.getElementById('fun_div')).prop('offsetWidth'); 
    console.log('Width of fun_div: ' + divsize); 
    },50); 
+2

Использование setTimeout для этой цели - не очень хорошая идея. В этом случае вы предполагаете, что браузер завершит рендеринг всего, что вам нужно, в течение 50 мс. Я уверен, что современный компьютер может справиться с этим, но как насчет бюджетного смартфона? Вместо этого используйте тайм-аут Angulars $, он гарантирует, что весь рендеринг закончен, прежде чем вызывать свою функцию. – HammerNL

+0

@HammerNL Согласен. – Helzgate

Смежные вопросы