【发布时间】:2020-01-09 17:44:09
【问题描述】:
我有以下使用 knockout.js 填充 div 的 HTML 代码:
<span data-bind="foreach: $root.days">
<div class="slider" data-bind="attr: { day: day}">
<span data-bind="foreach: $root.segment">
<div class='slider-segment' data-bind= "style: {left: left,
width: width, backgroundColor: color}"></div>
<div class='slider-button' data-bind= "style: {left: left}"></div>
</span>
<div class='slider-label' data-bind="text: day"></div>
</div>
</span>
这段代码连同 ko.js 在 chrome 的检查模式下创建了如下所示的 div::
<div class="slider" data-bind="attr: { day: day}" day = mon>
.
.
.
<div class="slider" data-bind="attr: { day: day}" day = sun>
这是 ko.js 函数:
self.updateclock = function() {
now = (new Date());
timenow = now.getHours() + (now.getMinutes() / 60);
today = days[now.getDay()];
self.datetime(today.toUpperCase() + " " + format_time(timenow));
console.log(today.toUpperCase() + " " + format_time(timenow));
var current_key = 0;
var sx = $(".slider[day=" + today + "]")[0].offsetLeft;
console.log(sx);
var y = $(".slider[day=" + today + "]")[0].offsetTop;
console.log(y);
var x1 = sx + slider_width * (timenow / 24.0);
console.log(x1);
var x2 = sx + slider_width * (schedule[today][current_key].start / 24.0);
console.log(x2);
var w = x1-x2;
我想用 jQuery 选择器选择任何那个 div 并访问它的参数,
我是这样做的:
var sx = $(".slider[day=" + today + "]")[0].offsetLeft;
但是这会产生错误:
thermostat.js:105 Uncaught TypeError: Cannot read property 'offsetLeft' of undefined
在 ThermostatViewModel.self.updateclock (thermostat.js:105)
在 ThermostatViewModel.self.start (thermostat.js:90)
在 thermostat.js:166
如何正确使用jQuery选择器来选择每个生成的div的属性?
【问题讨论】:
-
实际生成的 html 在页面检查器中是什么样子的?
.slider[day=""]将寻找看起来像<div class="slider" day="whateverValue">的东西 -
我在帖子中描述过,但抱歉,我输入了“编辑器”,但意思是浏览器检查
-
如果是这样,那么您的 div 上就没有
day的属性。 -
我又出现了一些错别字...非常抱歉,这就是它的样子:K,在这种情况下,您应该能够使用
[day="sun"]语法选择它
标签: jquery knockout.js