我有下面的HTML代码,它使用knockout.js来填充div:
<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沿着创建了div,在chrome的检查模式下看起来像这样:
<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;
我希望使用jQuerySelector选择任何div并访问其参数,
我是这样做的:
var sx = $(".slider[day=" + today + "]")[0].offsetLeft;
但是,这会产生错误:
temperaton.js:105未捕获类型错误:无法读取未定义的属性'offsetLeft'
在恒温器视图模型.self.updateclock(恒温器.js:105)
在恒温器视图模型自启动(恒温器js:90)
在恒温器处。js:166
如何正确地使用jQuery选择器来选择每个生成的div的属性?
1条答案
按热度按时间exdqitrt1#
更新的答案
(根据评论更新答案)
如果您只想呈现特定日期的元素,我将在视图模型上创建一个函数:
然后,您所要做的就是使用此函数显示相应日期的timemarker div(使用
visible
绑定)。旧答案
一个自定义绑定处理程序就可以做到这一点:
应用如下:
根据您创建阴影的方式,您可能甚至不需要自定义绑定处理程序,但可以使用CSS/内联样式和默认的
css
或style
绑定来使其工作。另外,就像评论中提到的其他人一样,
div
元素在技术上不应该进入span
元素的内部。内联元素不应该包含块级元素。