0

これはスクリプトのjQueryバリアントです(機能しません):

<script language="javascript">
$("div.post-content").each(function(){
    if($(this).innerHTML.indexOf("[/float]") != -1) {
        pattern= /\[float=(.*?)\]([^\[]*)\[\/float\]/gi
        $(this).html($(this).innerHTML.replace(pattern, "<span style='float: $1;'>$2</span>"))
    }
})
</script>

これは純粋なJavascriptバリアントです(完全に機能します):

<script language="javascript">
posts=document.getElementsByTagName("div")
for(x in posts) if(posts[x].className=="post-content") {
    post = posts[x].innerHTML;
    if(post.indexOf("[/float]") != -1) {
        pattern = /\[float=(.*?)\]([^\[]*)\[\/float\]/gi
        posts[x].innerHTML = posts[x].innerHTML.replace(pattern, "<span style='float: $1;'>$2</span>")
    }
}
</script>

このスクリプトの機能:

  1. クラスを持つすべてのdivを探しますpost-content
  2. bbcodeの終了タグがあるかどうかをチェックします。
  3. 正規表現を使用して、指定されたbbcodeタグのパターンを探します。
  4. bbcodeタグをhtml要素に置き換えます。

ここで何を間違えたのかわかりません...

4

1 に答える 1

2

innerHTMLjQueryを使用する場合は使用しないでください。値を割り当てるときは間違っており(メモリリーク)、値を読み取るときは悪い習慣です。使用する

$(this).html()

または、本当にしたい場合は、

$(this)[0].innerHTML

jQueryオブジェクトは、プロパティを持たない配列innerHTMLを返します。しかし、繰り返しになります.html()が、jQueryのスタイルをより多くコードに使用します。

于 2012-06-30T09:29:14.510 に答える