2012-06-30 67 views
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. 它用html元素替換bbcode標籤。

我不知道我做錯了什麼在這裏...

+3

首先用'innerHTML'替換'innterHTML' – fvu

+0

awww,廢話。 Dat錯字。仍然沒有工作壽。 –

回答

2

使用jQuery時,不要使用innerHTML。分配一個值(內存泄漏)時是錯誤的,在讀取值時是錯誤的。使用

$(this).html() 

,或者,如果你真的想,

$(this)[0].innerHTML 

jQuery對象返回陣列,不具有innerHTML財產。但是,再次,使用.html()爲更多的jQuery風格的代碼。

+0

第三種變體是用$(this).get(0).innerHTML'替換'$(this).innerHTML'。 – scessor

+0

噢,謝謝。不知道這一點。它現在有效。 –

+0

@scessor是的,我忘記了這一點,因爲我從來沒有看到它的重點,所以從未使用它。當你可以直接訪問數組中的元素時,它只是一個較慢的函數調用。 – MaxArt