2013-05-17 73 views
-1

使用alert調試,if的分支被執行。但匹配的代碼標籤沒有獲得「數據語言」屬性。

divs.html(function (index, oldhtml) { 
    var newhtml = converter.makeHtml(oldhtml); 
    var pat = /\{-# CODE (.+?) #-}/i; 
    $('code', newhtml).text(function (index, text) { 
     var m = text.split("\n")[0].match(pat); 
     if (m) { 
      $(this).attr("data-language", m[1]); 
     } 
    }); 
    return newhtml; 
}); 
+2

你檢查過m [1]'的值是什麼嗎? – JJJ

+1

這是因爲你沒有修改'newhtml'字符串的屬性,你正在創建一個'newhtml'的dom副本並修改它,這些修改不會返回到'newhtml'因此它不起作用 –

+0

@Juhana:是。通過測試文本,我得到了if(m)的分支。 – Magicloud

回答

0

但代碼標籤匹配沒有得到「數據語言」屬性。

那是因爲你沒有得到「數據語言」屬性,你設置它。

$(this).attr("data-language", m[1]); 

「數據語言」屬性,無論是保存在m[1]。請參閱jQuery的.attr()文檔。

從元素得到的數據,你會使用兩種:

$(this).attr('data-language'); 

或者(更語義正確):

$(this).data('language'); 

要設置數據屬性,你應該再次使用jQuery的.data()方法:

$(this).data('language', m[1]); 
+1

我認爲「匹配的代碼標籤沒有得到」數據語言「屬性。」他們的意思是該屬性沒有設置在該元素上。 –

+0

@AnthonyGrist:你說得對。 – Magicloud