2009-10-15 32 views
0

好吧,所以基本问题是设置div元素的innerHTML,我的字符串中的任何html标记在除Firefox之外的所有主流浏览器中都被剥离(而不是显示)。现在对于catch来说,当页面第一次加载时不会发生,它只发生在部分回发(除非它的Firefox,然后它总是有效)。使用Javascript的innerHTML的问题

我试图运行一个脚本(实际上是通过ScriptManager创建并从代码后面添加的)来为某些已有的html元素添加一些html元素(带有事件处理程序)。我知道脚本始终在运行,即使在我遇到问题时也是如此,因为我可以对现有元素的html进行核对或设置一些文本。我甚至可以使用文本和标记,但标记不会在文本显示时显示,除非文本位于标记内。所以:

someElement.innerHTML = “等等等等等等” - 作品

someElement.innerHTML = “<br/><br/>Blah blah blah<br/><br/>

等等等等等等显示,但没有休息

someElement.innerHTML = “<p>This will disappear</p><div>So will this</div>

所有这些文字都会随标记一起消失。哦,我看着做这个'标准'的方式,即document.createElement等,但我有完全相同的问题。

如果你需要/想知道其他任何问题。

编辑:当我说主要的浏览器,特别是我的意思是:Safari浏览器4.0.3,Chrome浏览器3.0.195.27,和IE 8.0.6

完整的JavaScript(有关此功能)。如果有格式错误是因为这实际上是C#中的一个字符串,所以出现了一堆时髦的逃脱废话,我试图删除为清晰起见。

var overflowEls = getElementsByClass("descriptionBox"); 

for (var i = 0; i < overflowEls.length; i++) 
{ 
    if (checkOverflow(overflowEls[i])) 
    { 
     var html = overflowEls[i].innerHTML; 
     overflowEls[i].innerHTML = overflowEls[i].innerHTML = "<div class="videoFeedDescriptionButtons" onclick="expand(this);">+</div><br/><div onclick="collapse(this);" class="videoFeedDescriptionButtons">-</div>" + html;    

    } 
} 

周围的HTML,牢记它正从YouTube的Feed提取,然后由.NET Repeater控件生成:

<td valign="top" style="margin: 5px 5px 5px 5px;height:auto;"> 
    <div class="descriptionBox" style="max-height:100px; overflow:hidden;" > 
    <b> 
    THE WORLDS BIGGEST PLANES!! by kieran smith</b><br /> 
    <br /> 
    by Antonov (ASTC). It was designed for the Soviet space program as a replacement for the Myasishchev M-4 'Bison' for the purpose of carrying the Energia  rocket boosters and to also be able to carry the Buran space shuttle in piggy-back mode much the same as the American Shuttle Carrier Aircraft.The An-225  first flew on 21 December, 1988. Only one An-225 is currently in service. It is commercially available for carrying ultra heavy and/or oversize freight. It  can carry up to 227 metric ...<br /> 
    </div> 
    <a id="ctl00_ContentPlaceHolder1_Repeater1_ctl01_lnView" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Repeater1$ctl01 $lnView','')">View</a>&nbsp;&nbsp;<a id="ctl00_ContentPlaceHolder1_Repeater1_ctl01_lnAdd" 

    href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Repeater1$ctl01$lnAdd','')">Add</a> 
<br /> 

+0

你确定你没有脚本运行插入后,即清除div或将其替换为无。如果您在插入后直接添加警报(someElement.innerHTML)(或者更好的FF上的console.log),那么它会显示什么? – robjmills 2009-10-15 22:56:42

+0

请显示代码。 – 2009-10-15 22:57:59

+1

你可以发布“someElement”在里面的周围的HTML吗? – 2009-10-15 22:58:03

回答

0

原来,脚本管理员多次将脚本添加到页面中。有点。我之所以这样说,是因为它正在输出脚本,其中仍然包含一些C#格式的东西。下面是它的样子:

<script type="text/javascript"> 

"var overflowEls = getElementsByClass("descriptionBox"); for (var i = 0; i < overflowEls.length; i++) { if (checkOverflow(overflowEls[i])) { var html = overflowEls[i].innerHTML; overflowEls[i].innerHTML = overflowEls[i].innerHTML = " 

<div class="\"onclick="\">+</div> 

<div onclick="\"collapse(this);\""class="\"videoFeedDescriptionButtons\"">-</div> 
"" + html;}}" 

</script> 

正如你所看到的,一团糟。无论如何,我通过将脚本作为一个函数移动到aspx页面并让scriptmanager输出对函数的调用来解决这个问题,所以现在我已经在html头部中增加了越来越多的函数调用脚本。该脚本现在可以工作,所以我打算将其标记为已回答并打开一个新问题,试图找出scriptmanager添加重复项的原因。

0

也许你可能有#someElement * { display: inline !important }什么在你的CSS类似。

+0

我不这么认为,我找不到任何适用于我正在使用的div的规则。另外,div完全不出现,即使在页面源代码中也是如此。我不认为显示:内联;可以导致这一点。 – Trajanus 2009-10-15 23:48:19