Angular:从DOM中选择元素
Angular: Selecting elements from DOM
我使用ng-repeat来创建项目。我想确定使用函数创建的每个元素的高度。
我知道如何将ng-repeat创建的元素的索引传递给应该确定高度的函数,但我在实际选择该项目时陷入了困境。
这是我现在使用的:
$scope.getItemHeight = function(index) { // index is index of element in ng-repeat
var itemHeight = angular.element('li').eq('+index+').offsetHeight;
return itemHeight;
};
但由于错误,这不起作用:Error: [jqLite:nosel] Looking up elements via selectors is not supported by jqLite!
我也试过:
$scope.getItemHeight = function(index) {
var itemHeight = document.querySelectorAll('ul:nth-child('+index+')');
return itemHeight;
};
返回一个长度为0的元素,因此选择器不起作用。
我在这里错过了什么?
参考此处:http://codepen.io/squrler/pen/LxsfE?editors=101
编辑:
我想要的现在是不可能的。更多信息请访问:https://github.com/driftyco/ionic/issues/1691
编辑:在进一步观察之后,它似乎有点复杂。触发重复器的指令需要运行才能渲染lis,当li被渲染时(假设你把它移动到指令中),它会触发指令来获取它的高度,但是li和它对应的数据还没有完全渲染,因此没有高度。如果使用超时等待呈现,则在超时等待期间,重复器将继续呈现,而不需要有效的高度数据。看来你遇到了一个难题。您可以尝试使用http://binarymuse.github.io/ngInfiniteScroll/或类似的东西。
这应该放在一个指令中,这样可以让你在渲染时更容易地访问到li。
类似:
.directive('getHeight', ['$filter', function ($filter) {
'use strict';
return {
restrict: 'A',
scope: true,
link: function (scope, element, attrs) {
var li = element[0];
var height = li.offsetHeight;
console.log('Height': height)
}
};
}]);
一旦你有了高度,你就不确定你想用它来做什么了…
否则你可以直接输入:
var ul=document.getElementsByTagName('ul')[0];
var li=ul.getElementsByTagName('li')[index];
var height=li.offsetHeight;
相关文章:
- WebdriverIO waitForExist()选择元素's选定的选项
- 如何选择元素的第n个子元素
- Angular没有根据模型更新我的选择元素
- jquery使用name from变量按类选择元素
- 如何使用jQuery按数据日期属性选择元素
- 向html选择元素添加选项
- 使用Jquery在相同类型的元素中选择元素
- 他们是如何使用angular/jqLite find()方法按属性名称和值选择元素的?ng conf 2015
- 如何在Angular中清除选择元素中的过滤器
- 使用其中一个元素作为参考点,从Javascript数组中选择元素
- Javascript选择元素到字符串的比较
- Angular始终选择选择元素中的第一个选项
- 使用 jquery .find() 遍历按类和存储属性选择元素
- 通过 id json, jquery 选择元素
- 如何基于另一个已经存在的选择器选择元素
- 禁用多个选择元素中的非“选定”选项,但使用 jquery 的一个除外
- HTML 选择元素的只读等效项
- 在iPad上,如何通过Javascript事件在选择元素上设置focus()而不显示选项
- 单击事件似乎不适用于 IE 中的选择元素
- Angular js,在选择元素上,我想 POST 数据以将其保存在数据库中,然后我想使用 PUT 更新它而无需重新加载