我使用jQuery 1.3.2和Firefox收到一个奇怪的错误。我为元素创建了一个小弹出窗口,我正在使用代码
var popupWindow = $($('#template')[0].innerHTML).css(
'top', top).css(
'left', left).css(
'position', 'absolute').css(
'opacity', '1');
然后我使用Append()和AppendTo()函数基本上提供,我尝试确定高度和宽度,但每个下面得到JS异常错误
var right = left + $(popupWindow).width(); // empty width, js exception
var bottom = top + $(popupWindow ).height(); //empty height, js exception
对于Append()命令显示了popupWindow,但是由于它们在FF-DOM中不可见,因此无法获得宽度,高度和元素。
在IE中一切正常,但不在Firefox ?
有没有人有任何想法,因为我现在已经尝试了几个小时并且得到了一堵砖墙。
答案 0 :(得分:0)
我不完全确定你为什么要使用
var popupWindow = $($('#template')[0].innerHTML)
基本上翻译为
“获取id为模板的元素(这将只是有效HTML的一个元素),然后获取第一个元素的innerHTML
,然后换行jQuery对象中innerHTML中包含的元素。“
为什么不使用
var popupWindow = $('#template').css({
top : top,
left: left,
position: 'absolute',
opacity: 1 });
另外,可能要考虑使用类而不是内联css。如果您需要进一步的帮助,请发布html布局。
答案 1 :(得分:0)
var popupWindow = $($('#template')[0].innerHTML)
是的,你真的不想这样做。
这将获取模板div的HTML并将其发送到$()
函数,这是一个多功能函数。根据#template的内容,它可能会创建一些HTML(可能是多个元素,丢弃任何直接文本内容),或者它可能将其视为选择器并从页面中选择匹配元素。
(这不是我最喜欢的jQuery功能之一。)
此外,在jQuery中使用innerHTML
会产生副作用,因为jQuery会将自己的属性添加到元素中,以识别它们以添加数据和事件处理程序。如果你复制IE上的innerHTML
< 8(它有一个错误,它认为属性和属性是一样的),你将无意中复制那些jQuery内部ID,制作同一元素的两个副本并混淆图书馆。您应该使用.html()
来获取jQuery标记;这会使用一个破坏的RegExp来尝试在递交标记之前删除内部ID属性。
(这也不是我最喜欢的jQuery功能之一。)
如果您只想在模板元素上设置样式,请说:
var popupWindow= $('#template');
popupWindow.css({top: '1px', left: '2px', ...});
如果您想制作模板的副本并在其上设置样式:
var popupWindow= $('#template').clone();
popupWindow.css(...);
也没有必要说:
$(popupWindow)
因为popupWindow已经是一个jQuery包装器。你只是让它制作内部元素列表的另一个副本。
js exception
有什么例外?就个人而言,我没有例外,但这在很大程度上取决于你放在#template
内的内容。