2014-04-17 78 views
0

$("<test") & document.createElement(",test")由於與文本關聯的<字符而拋出錯誤。我不想替換字符&想看看是否有選擇使用這種文本創建dom或jquery對象。我知道替換會工作,但由於代碼是預先存在&也因爲代碼被寫入,以便它假定它可以具有簡單的文本(textnode)或html標記(如跨度),因此此錯誤發生,因爲它無法檢查如果它是正確的自我關閉的HTML標籤。jquery&doc.createElement拋出錯誤<

我想它來創建XML節點&的再檢查childnode是textNode或不嘗試創建jQuery對象之前,但是我正在尋找的建議&最好的辦法來解決這些問題。我知道的<更換將工作&也沒有必要檢查純文本的屬性,但因爲代碼是動態的,它有時會檢索純文本&一段時間,它給合法的HTML標記,爲什麼這個問題似乎

+0

你究竟想要達到什麼目的?你總是可以測試第一個字符。你也可以在'try'塊中執行你的調用,並在異常處理程序中相應地執行。 – collapsar

+4

即使有一個簡單的文本節點,你所要做的似乎確實是錯誤的。 – epascarello

+0

你可以給一個例子jsfiddle – Martin

回答

1

我不知道你確切的最終目標是什麼,但基本上你需要做這樣的事情:

function makeElemHack(str) { 
    var div = $("<div>").html(str); //create a div and add the html 
    var html = div.html();   //read the html 
    if (!html.length) {    //if the html has no length the str was invalid 
     div.html(str.replace(/</g,"&lt;")); //escape the &lt; like text should be 
     //div.text(str); //or you can just add it as plain text 
    } 
    return div;    //with the div wraper 
    //return div.contents(); //without the div wrapper 
} 

var bd = $("body"); 

bd.append(makeElemHack("<p>Hello</p>")); 
bd.append(makeElemHack("1<0")); 
bd.append(makeElemHack("<booo")); 
+0

請參考我的解決方案下面的小提琴它使用xml和nodeType函數來查看節點是textnode或html。 tag.http://jsfiddle.net/QxdYm/2/(僅適用於Firefox) – user593029

+0

爲什麼我應該參考您的解決方案?那麼'testTxtNode(「 epascarello

+0

@ user593029你的例子似乎並不像你所要求的那樣工作......'testTxtNode(「 Martin