0

さて、基本的な問題はdiv要素のinnerHTMLを設定することです。私の文字列にあるすべてのhtmlマークアップは、Firefoxを除くすべての主要なブラウザーで削除されます(表示されません)。キャッチのために、これはページが最初にロードされたときに発生せず、部分的なポストバックでのみ発生します(Firefoxでない限り、常に機能します)。

スクリプト(実際にはScriptManagerを介してコードビハインドから作成および追加されている)を実行して、いくつかのhtml要素(イベントハンドラーを含む)を既存のhtml要素に追加しようとしています。既存の要素のhtmlを削除したり、テキストを設定したりできるため、問題が発生した場合でも、スクリプトが常に実行されていることはわかっています。テキストとマークアップを含めることもできますが、テキストがマークアップ内にない限り、テキストがレンダリングされる間、マークアップはレンダリングされません。それで:

someElement.innerHTML = "Blahblahblah"-動作します

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

Blah blah blahが表示されますが、途切れることはありません

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

そのテキストはすべて、マークアップとともに消えます。ああ、私はこれを「標準的な」方法、つまりdocument.createElementなどで行うことを検討しましたが、まったく同じ問題がありました。

他に何か知りたい/知りたい場合は、質問してください。

編集:私が主要なブラウザと言うとき、具体的には、Safari 4.0.3、Chrome 3.0.195.27、およびIE8.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フィードから取得され、.netリピーターコントロールによって生成されることに注意してください。

<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 />

4

2 に答える 2

0

#someElement * { display: inline !important }おそらく、CSSに似たようなものがあるかもしれません。

于 2009-10-15T23:16:29.827 に答える
0

どういうわけか、scriptmanager がスクリプトをページに複数回追加していたことが判明しました。並べ替え。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 が重複を追加している理由を突き止めます。

于 2009-10-16T17:04:47.193 に答える