这是一段代码片段(来自更大的代码),在Blackberry中不起作用。我正在操纵DOM以动态插入ul元素。
我正在测试Blackberry 9700,OS 5.0。我正在做的是非常基本的,没有脑子和其他桌面浏览器。我知道Blackberry上的JavaScript支持是不完整的 - 但这是基本的东西吗?
附件是我看到的错误的屏幕截图。 JavaScript报告函数insertBefore不存在。但是,我已经测试过它存在并在我直接追加到身体时起作用
document.body.insertBefore( newNode, sibling );
不起作用的代码是:
<html>
<head>
<script type="text/javascript">
function toggle(){
_ul = document.getElementById('ul-list');
if( _ul )
{
document.body.removeChild( _ul );
}else
{
ul = document.createElement( "ul" );
ul.setAttribute('id','ul-list');
li = document.createElement( 'li' );
li.appendChild( document.createTextNode("HTML") );
ul.appendChild( li );
li = document.createElement( 'li' );
li.appendChild( document.createTextNode("CSS") );
ul.appendChild( li );
li = document.createElement( 'li' );
li.appendChild( document.createTextNode("JavaScript") );
ul.appendChild( li );
li = document.createElement( 'li' );
li.appendChild( document.createTextNode("XML") );
ul.appendChild( li );
parent = document.getElementById('container');
sibling = document.getElementById('para');
try
{
func = parent.insertBefore;
if( !func )
{
alert( "Function doesn't exist!" );
}
parent.insertBefore( ul, sibling );
}catch( err )
{
alert( err );
}
}
}
</script>
<style type="text/css">
</style>
</head>
<body>
<div id ="container">
<p id ="para" >Display this link list as a horizontal menu:</p>
<input type="button" name="Show Now!" value ="Toggle" onClick=" toggle();"/>
</div>
</body>
</html>
答案 0 :(得分:0)
我确认这是在Blackberry 5.0中实现DOM的错误(在设备9000和9700上)。
如果必须动态插入或移除元素,则解决方法是将元素直接放在正文下。有效的代码是:
<html>
<head>
<script type="text/javascript">
function toggle(){
_ul = document.getElementById('ul-list');
if( _ul )
{
document.body.removeChild( _ul );
}else
{
ul = document.createElement( "ul" );
ul.setAttribute('id','ul-list');
li = document.createElement( 'li' );
li.appendChild( document.createTextNode("HTML") );
ul.appendChild( li );
li = document.createElement( 'li' );
li.appendChild( document.createTextNode("CSS") );
ul.appendChild( li );
li = document.createElement( 'li' );
li.appendChild( document.createTextNode("JavaScript") );
ul.appendChild( li );
li = document.createElement( 'li' );
li.appendChild( document.createTextNode("XML") );
ul.appendChild( li );
parent = document.body;
sibling = document.getElementById('para');
try
{
func = parent.insertBefore;
if( !func )
{
alert( "Function doesn't exist!" );
}
parent.insertBefore( ul, sibling );
}catch( err )
{
alert( err );
}
}
}
</script>
<style type="text/css">
</style>
</head>
<body>
<p id ="para" >Display this link list as a horizontal menu:</p>
<input type="button" name="Show Now!" value ="Toggle" onClick=" toggle();"/>
</body>
</html>
更改是内容直接在body下,而不是div“container”的子项。我相信这不是使用WebKit渲染引擎的Blackberry 6.0+中的问题。需要与这个有缺陷的浏览器一起使用,直到它们不被支持为止。