在 AngularJS 中不使用 JQuery 获取 HTML 元素高度

Posted

技术标签:

【中文标题】在 AngularJS 中不使用 JQuery 获取 HTML 元素高度【英文标题】:Get HTML Element Height without JQuery in AngularJS 【发布时间】:2014-03-20 16:24:01 【问题描述】:

我正在熟悉 AngularJS。我尽量做到“纯粹”。出于这个原因,我试图避免包括 jQuery。但是,我在获取 html 元素的高度时遇到了挑战。目前,我正在尝试以下方法:

angular.module('myModule', [])
  .directive('myDirective', function() 
    return 
        restrict: 'A',
        link: function(scope, element) 
            console.log(element.css('height'));
        
    ;
  )
;

但是,当执行此代码时,控制台会写入一个空行。我正在尝试显示元素的高度。有没有办法在不使用 jQuery 的情况下在 AngularJS 中做到这一点?

谢谢!

【问题讨论】:

【参考方案1】:

如果您使用,这似乎可以正常工作并给出相同的结果:

element.style.height

由于没有在元素上设置内联样式或 CSS 高度,因此会显示一个空行。您可以直接获取 HTML 元素的高度,而不是依赖样式。

console.log(element[0].offsetHeight);

http://plnkr.co/edit/03YWwjBjYpid4fVmDxlM?p=preview

How do I retrieve an HTML element's actual width and height?

【讨论】:

这对我有用!我试图从使用angular.element('#header').height() 的应用程序中删除jQuery。你可以用angular.element(document.querySelector('#header'))[0].offsetHeight 做同样的事情。谢谢! 您可能关心也可能不关心这个,但document.getElementById 在性能方面会比 ID 的 querySelector 更好。 我无法复制它来展示。我遇到的问题是使用 ng-repeat 渲染的元素和相同的元素,但静态元素具有不同的高度。原因可能不同。加载时间?我的意思是,一个人需要从 javascript 中获取内容来设置 DOM,而另一个人则可以将其一目了然。如果是这种情况,是否有一些解决方法?【参考方案2】:

angular 提供的围绕元素的小包装器允许您请求属性,所以:

element.prop('offsetHeight');

可以正常工作,请参阅:http://plnkr.co/edit/pFHySDo7hjEcMKCqGuiV?p=preview

【讨论】:

谢谢兄弟,你拯救了我的一天:)

以上是关于在 AngularJS 中不使用 JQuery 获取 HTML 元素高度的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 AngularJS 中不使用幻数验证 SVG 图像

为啥 AngularJS 指令中不推荐使用 `replace` 属性? [复制]

AngularJs 内容在查看源代码中不可见

$http.post 在 AngularJS 中不起作用

$location 在使用 d3.js 的 AngularJS 中不起作用

将文件附加到 FormData 在 angularjs 中不起作用