提问人:Abie 提问时间:1/13/2009 最后编辑:Rob WAbie 更新时间:12/29/2011 访问量:1132
Low Pro Prototype DOM Builder 可以在 IE 中工作吗?
Does Low Pro Prototype DOM Builder work in IE?
问:
Dan Webb 对 Prototype 的 Low Pro UJS 扩展提供了以下优雅的 DOM Builder:
var listItem = $li({ id : 'item-1' },
$strong("Some text")
);
// returns a node equivalent to: <li id="item-1"><strong>Some text</strong></li>
$('a_list').appendChild(listItem);
虽然这在Firefox和Safari中对我们来说就像一个梦想,但在IE 6和IE7中,它因错误“对象不支持此属性或方法”而爆炸
对 Dan Webb 的 DOM Builder 可能正在做什么来包装与 IE 不兼容的 Element.new 有什么见解吗?
答:
0赞
Diodeus - James MacFarlane
1/13/2009
#1
从 v1.6 开始,Prototype 有一个内置的元素构造函数。语法与 Low Pro 略有不同。
$('a_list').insert(new Element("li", {id: 'item-1'})).update('some text').wrap('strong')
评论
0赞
Abie
1/13/2009
没错,谢谢。不幸的是,它比 Low Pro 的语法要麻烦得多。似乎您可以链接构造函数,但不清楚如何在同一级别创建多个嵌套元素。
0赞
Abie
1/15/2009
好的,解决了嵌套兄弟姐妹的语法,但与 Low Pro 相比,男孩是不是很丑。
1赞
Jack Sleight
2/7/2009
#2
我想“对象不支持此属性或方法”错误来自对 Prototype 的扩展元素方法之一的调用(在 IE 中不会自动应用)。但是,您正在处理的所有元素都来自 LowPro 或 $() 函数,这应该会为您扩展元素。
您可以尝试一下,看看它是否解决了问题:
var listItem = Element.extend($li({id: 'item-1'},
Element.extend($strong("Some text"))
));
$('a_list').appendChild(listItem);
如果这解决了它,那么 LowPro 就不会扩展元素,这很奇怪。如果没有,那么一定有其他问题,你能在某处发布演示页面吗?
评论