簡單地替換HTML將刪除所有事件偵聽器,並且還可能導致未來的問題,如果你有在URL等下劃線的鏈接
你應該做的是通過元素並改變文本節點的值。我不確定如何在jQuery中可靠地做到這一點,但這裏是你如何使用普通的JavaScript DOM來做到這一點。
function replaceUnderscore(index, el) {
switch (el.nodeType) {
case 3: // text node
el.nodeValue = el.nodeValue.replace(/_/g, '');
break;
case 1: // normal element
for (var i = 0, child; child = el.childNodes[i]; i++) {
replaceUnderscore(i, child);
}
break;
}
}
若要將此你jQuery中找到的元素,你只是做
$('.class').each(replaceUnderscore);
沒有測試,但我認爲這應該工作。
這就是說,你必須在JavaScript中做到這一點?理想情況下,這種類型應該在服務器端執行。如果它是一個CMS,您可能可以爲此編寫一個小插件。
你需要什麼?您的代碼按預期工作。 「其他導航項目」需要通過ID或不同的類名來標識,因此您只能替換所需導航中的「_」。 –
@MarcosPérezGude如果你看看輸出結果,你會看到,「Software One」和「Software Two」現在都在替換後顯示爲「Software One」。 – mrwhynot
「Software One」和「Software Two」的混合問題很容易解決。您正在用jQuery創建的自動循環直接替換。如果你使用你自己的循環並用'$(this)'取出當前元素,問題就會消失。 –