簡體   English   中英

字符串處理以將斜杠添加到自閉合標簽(IMG、BR 等)

[英]string processing to add trailing slash to self-closing tags (IMG, BR etc)

如果我得到一個元素的 innerHTML,某些子元素應該有一個尾部斜杠才能成為有效的 XHTML(例如,“<br />”),但在 Chrome、Firefox 或 IE 中,無論文檔類型如何,它們都沒有.

顯然這在大多數情況下並不重要,但在我的情況下,我使用從 DOM 中提取 html 作為模板系統的一部分——所以如果這些反斜杠丟失,它們 go 以這種方式進入使用這些反斜杠構建的結果頁面模板,因此該頁面不會驗證為 XHTML。 非驗證頁面似乎讓我的客戶感到難過。

所以....我正在尋找一些 javascript 代碼(可能是正則表達式),它將在適當的地方添加反斜杠。 如果它適用於這些元素類型,那對我來說已經足夠好了:

區域、基礎、br、col、嵌入、hr、img、輸入、鏈接、元、參數

我想如果標簽內的引號中有 > ,它就不會感到困惑。

我知道有一個 dom-to-xml 庫 (http://xhtmljs.codeplex.com/) 可以做到這一點,但它也做了很多其他的事情,而且是相當蠻力的。 我希望有更簡單的東西。

編輯:

好吧,因為我對字符串處理方法沒有任何了解,所以我繼續做一些對我有用的事情。 (雖然它會被引號中的 > 弄糊塗,我稍后會處理):

var addClosingSlashes = function (htmlString) {
    var elemTypes = [
    "area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param"];
    var inString, outString = htmlString;
    for (var i=0; i<elemTypes.length; i++) {
      var index1 = 0, index2;
      inString = outString;
      outString = '';
      while ((index1 = inString.indexOf("<" + elemTypes[i])) != -1) {
        if ((index2 = inString.indexOf(">", index1)) != -1 && inString.substring(index2 - 1, index2 + 1) != '/>') {
          outString += inString.substring(0, index2) + " />";
          inString = inString.substring(index2+1);
          }
        else {
          break;      
          }
        }
      outString += inString;
      }
    return outString;
    };

除非這是服務器端 javascript,否則這不會做任何事情。 當瀏覽器執行 javascript 時,DOM 被構建為 DOM,而不是某種文本元素。 也就是說,元素已經構建到樹中,您無法做任何其他事情來影響渲染。

嘗試根據此問題的答案更改源文檔的提供方式: 當對象(例如 img 標記)由 javascript 創建時,它沒有結束標記。 如何使其 W3C 有效?

另外,請參閱此問題的答案... :-) RegEx 匹配開放標簽,XHTML 自包含標簽除外

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM