javascript
  • jquery
  • 2010-10-19 64 views 0 likes 
    0

    我有HTML獲取轉義的HTML,放入輸入作爲值

    <table> 
    <tr><td id="cell">&lt;a href=&quot;&quot;&gt;Google.com&lt;/a&gt;</td></tr> 
    </table> 
    
    <div id="to"></div> 
    

    而且我的JavaScript

    $(document).ready(function() { 
        var html = '<input type="text" value="'+$("#cell").html()+'" />' 
        $("#to").append(html); 
    }); 
    

    我不知道爲什麼,但執行該代碼時,我」 m只能輸入<a href=。在firebug的檢查員輸入html顯示爲<input type="text" a&gt;="" &gt;google.com&lt;="" value="&lt;a href=" >正如你所看到的,$quot;被替換爲" - 這是問題所在。

    我試過使用.text()而不是.html() - 幾乎是相同的情況。

    什麼是我的錯?

    謝謝。

    +0

    這可能是不相關的,但你可以用它代替文本框textarea的,它接受一個換行符雖然。 – jerjer 2010-10-19 11:01:53

    +0

    @jerjer:textarea與單行輸入沒有區別。你必須'&' - 在其中隱藏任何HTML特殊字符。瀏覽器讓你擺脫一個textarea中比輸入文件稍微差一些的無效代碼,但是你不應該依賴它。 – bobince 2010-10-19 11:10:55

    回答

    0

    試試這個:

    $(document).ready(function() { 
        $('<input type="text">').val($("#cell").html()).appendTo("#to"); 
    }); 
    

    避免從字符串和變量中構建HTML,使用jQuery和DOM爲您提供的函數賦值給屬性或更改元素的文本。這樣更安全,而且恕我直言,它也更具可讀性。

    2

    您需要編碼值(通過.val()在這種情況下設置),而不是直接在字符串中使用它,就像這樣:

    $(document).ready(function() { 
        var html = $('<input type="text" />').val($("#cell").html()); 
        $("#to").append(html); 
    }); 
    

    You can see it in a demo here。問題是&quote;被解碼"這是使你的HTML看起來像這樣:

    <input type="text" value="&lt;a href=""&gt;Google.com&lt;/a&gt;" /> 
    

    你可以看到如何使瀏覽器有點瘋狂:)

    +0

    我猜這應該是'val(... text())'而不是'html()'?除非用戶真的想在輸入值中看到'<'? – bobince 2010-10-19 11:12:12

    0

    嘗試編寫自定義函數來反轉義字符串

    function unescape(html) { 
        return html. 
        replace(/&amp;/gmi, '&'). 
        replace(/&quot;/gmi, '"'). 
        replace(/&gt;/gmi, '>'). 
        replace(/&lt;/gmi, '<') 
    } 
    
    +1

    這不可取。 HTML解析涉及到的不僅僅是替換一些字符串,而且像這樣的函數通常會讓它在某個地方變得更糟。 – Tomalak 2010-10-19 10:56:07

    +0

    不能保證瀏覽器在生成'html()'時會選擇'&' - 只顯示那些字符。不能依賴'innerHTML'的確切格式。 – bobince 2010-10-19 11:13:20

    相關問題