[英]variable array + regular expression not working together?
我做了一個小的笑臉腳本,它的作用是將:: 1 ::改為圖像html為div。
代碼如下:
var smileys = {
'1': 'http://domain.com/smiley1.gif',
'2': 'http://domain.com/smiley2.gif',
'3': 'http://domain.com/smiley3.gif'
};
function checksmileys(){
x$('.message').each(function()
var start = '<img src="';
var end = '">';
x$(this).html( x$(this).html().replace(/::(\d+)::/g, start + smileys['$1'] + end) );
});
Checksmileys功能由用戶事件觸發。
但是它無法從句子中獲取數字(即id)。 它繼續產生這個<img src="undefined">
我的HTML示例如下:
<div id="chat">
<ul>
<li class="message">Hi john</li>
<li class="message">what are you doing</li>
<li class="message">::1:: nothing</li>
<li class="message">hi</li>
<li class="message">nice to meet you ::1::</li>
</ul>
</div>
我的問題在哪里?
我想你需要一個函數:
html = html.replace(/::(\d+)::/g, function($0, $1) { return start + smileys[$1] + end })
這是html()
的功能形式派上用場的時候
$(this).html(function(_, oldhtml) {
return oldhtml.replace(/::(\d+)::/g, function($0, $1) {
return start + smileys[$1] + end;
})
})
在JavaScript中,屬性名稱沒有像PHP中經常使用的前綴。 您在smileys
對象中創建的屬性的名稱是1
,而不是$1
,因此將smileys['$1']
更改為smileys['1']
。
更新 :從下面的評論中,您似乎正在嘗試使用$1
來引用捕獲組。 僅當$1
是您傳入的字符串的一部分時才有效,但表達式start + smileys['$1'] + end
在調用replace
之前進行評估,然后傳遞給它。 smileys['$1']
將不確定。
由於您正在嘗試進行查找,最好的辦法是傳入一個執行查找的函數:
x$(this).html( x$(this).html().replace(/::(\d+)::/g, function(m, c1) {
return start + smileys[c1] + end;
}) );
c1
是第一個捕獲組的文本。 更多
你把它稱為一個數組,我猜是因為你習慣了PHP中的術語“關聯數組”。 你的smileys
對象只是一個對象,而不是一個數組。 在JavaScript中,當我們說“數組”時,我們指的是通過[]
或new Array
創建的東西,它具有特定類屬性名稱(數字)的特定處理,特殊length
屬性和一些方便的類數組函數。 你使用smileys
所做的完全正常,完全正常,我們傾向於不使用“數組”這個詞(“地圖”在JS世界中更常見)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.