我需要用<span class="red"></span>
將每個星號包裝在頁面上。我嘗試過的幾件事不起作用。我想這是歸結爲我需要搜索一個特定字符的頁面,我不知道如何做到這一點。使用jQuery將每個*包裝在頁面上使用jQuery
回答
對於沒有更換整個HTML(確實態度不好),我們可以做的元素快速操作:
var specialTags = ["script", "style"].join("|"),
re = new RegExp("^(?:" + specialTags + ")$", "i");
for (var els = document.getElementsByTagName("*"), i = els.length; i--;) {
var el = els[i];
if (re.test(el.tagName))
continue;
for (var j = 0, childs = el.childNodes, lj = childs.length; j < lj; j++) {
var child = childs[j];
if (child.nodeType === 3 && child.nodeValue.indexOf("*") > -1) {
var segments = child.nodeValue.split("*");
for (var k = 0, lk = segments.length; k < lk; k++) {
el.insertBefore(document.createTextNode(segments[k]), child);
if (k < lk - 1) {
var span = document.createElement("span");
span.className = "red";
span.appendChild(document.createTextNode("*"));
el.insertBefore(span, child);
}
}
el.removeChild(child);
}
}
}
這是純粹的JavaScript,不需要jQuery,這不能真正幫助這裏。
這個怎麼樣...
$("body:contains(*)").contents().each(function() {
if(this.nodeType == 1)
{
$(this).html($(this).html().replace(/\*/g, "<span class=\"red\">*</span>"))
}
});
+1這真棒! – 2013-04-26 15:20:08
你會想在nodeType == 3上做到這一點,以免替換html中的* – 2013-04-26 15:20:10
我最初嘗試,但它並沒有取代HTML中的文本,所以我需要獲取特定文本的父節點..因此嘗試使用Nodetype元素。也許我做錯了什麼...... – PSL 2013-04-26 15:21:44
這是一個有點髒和危險的(在下面解釋),但你可以嘗試以下方法:?
var allHTML = $("body").html();
allHTML = allHTML.replace(/\*/g, "<span class=\"red\">*</span>");
$("body").html(allHTML);
注意:正如Dogbert指出的那樣,這可能會取代HTML標記中的*
字符,例如節點屬性。
編輯:請記住,這可能會重新附加您身上的所有腳本!嘗試用您的主容器替換body
。
EDIT2:VisioN發佈了一個更詳盡但更安全的解決方案。
這將取代節點屬性中的「*」。 – Dogbert 2013-04-26 15:04:52
@Dogbert:這是真的,但是我不認爲你經常在屬性中使用這樣的字符?儘管如此,我會將其添加到答案中。 – MMM 2013-04-26 15:05:40
呃。不幸的是,我試圖編輯的東西在屬性中有*。謝謝,但是,這將解決問題,否則。我只需要靜靜地做,這將需要更長的時間。 – JacobTheDev 2013-04-26 15:09:38
沒有使用jQuery所以它可能會快一點,絕對不依賴於庫:
(function(str,e){
var regex = new RegExp(str, 'gi');
e.innerHTML = e.innerHTML.replace(regex, '<span class="red">*</span>');
})('*',document.body);
不幸的是它也有同樣的缺點。 – MMM 2013-04-26 15:14:08
這將工作,而不是取代*在不應該的標籤。
var text = $("body").find(":contains(*)").contents().filter(function() {
//Don't include css or script tags, all other text nodes are fine.
return this.nodeType == 3
&& ($(this).parent().get(0).tagName.toUpperCase() !== "SCRIPT")
&& ($(this).parent().get(0).tagName.toUpperCase() !== "STYLE");
}).replaceWith(function() {
return this.textContent.replace(/\*/g, "<span class=\"red\">*</span>");
您可以在此的jsfiddle測試別人的代碼,看看他們保持「喜」藍與否。如果它不保持藍色,他們有一個錯誤。
- 1. 如何使用jquery包裝每個div?
- 2. 使用jQuery:如何將每個字母包裝在標籤中?
- 3. 使用jQuery將每個元素用html包裝起來
- 4. jQuery - 包裝頁面
- 5. 包裝使用jQuery
- 6. 使用jQuery更改每個頁面上的CSS屬性
- 7. 如何使用jQuery從頁面上的每個href獲取值?
- 8. 使用jQuery在頁面上浮動DIV
- 9. 如何用html使用jquery包裝每3個子div?
- 10. jQuery頁面使用#/頁
- 11. 使用jQuery $。每個
- 12. 使用jQuery包裝$ span
- 13. 在HTML頁面中使用jQuery包含HTML頁面
- 14. 使用jQuery打破頁面包裝正文內容
- 15. 如何在我的網站的每個頁面上包含jQuery?
- 16. 在特定頁面上使用jQuery(放在頁面底部)
- 17. 使用jQuery將所有'•'元素與span標籤包裝在一起使用jQuery
- 18. 在使用JQuery的DIV中包含一個php頁面
- 19. 如何使用jQuery將每個第3個與<tr>包裝起來?
- 20. 將jquery插入到每個ASP.Net頁面
- 21. 在Jsp頁面使用jquery分頁
- 22. 如何在單個頁面上使用多個jQuery AutoSuggest?
- 23. 在一個頁面上使用兩個jquery幻燈片
- 24. 在多個頁面上使用多個jQuery插件?
- 25. 使用jQuery在一個頁面上播放多個幻燈片
- 26. 登錄頁面使用JQuery
- 27. 使用jquery更新頁面
- 28. 使用jquery拆分頁面
- 29. 打開頁面使用jQuery
- 30. 使用jQuery刷新頁面
你爲什麼要這麼做?我相信有更好的方法來實現你想要做的事情。 – 2013-04-26 14:52:25
我第二次Vega的評論,在這將是資源密集型的,因爲你將不得不檢查整個頁面的特定字符。 – user1477388 2013-04-26 14:53:46
這有點難以解釋,但基本上,這樣做比修改我爲頁面編寫的整個腳本更容易。 – JacobTheDev 2013-04-26 14:54:36