2013-04-02 44 views
1

如何通過knockoutjs設置HTML標籤的title屬性,使標籤內容中的任何HTML實體得到評估和顯示(即不會轉義)?使用包含HTML實體的值設置HTML標籤屬性,通過knockoutjs

實施例:

<div data-bind="attr: { title: titleObservable }"></div> 

在上面的例子中,如果titleObservable包含一個HTML實體,它不會被渲染,而將被顯示的實體名稱。有關工作示例,請參見fiddle。請注意,當您將鼠標懸停在div上時,標題文本將包含&#39而不是撇號符號。

我知道,設置與knockoutjs文本綁定HTML被轉義爲安全起見HTML標記的內容時(見this thread)。我假設這是我的title屬性中的實體正在發生的事情。我也知道,我可以直接將撇號嵌入到title屬性中,但是我想知道是否有辦法通過HTML實體執行此操作(由於我正在處理的項目存在一定的限制)。

回答

4

在Javascript中使用HTML實體(Knockout綁定使用的)的唯一方法是通過innerHTML。對DOM的所有其他訪問都使用UTF-8文本。

我建議您更新您的代碼以在模型中使用純文本,並僅在實際的HTML文檔中使用HTML實體。但是如果你不能這樣做,你可以使用一個自定義的綁定處理程序,在設置DOM屬性之前將其從HTML轉換爲文本。這是我剛剛提出的一個標題。

ko.bindingHandlers.myTitle = { 
    update: function(element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()); 
     var d = document.createElement('div'); 
     d.innerHTML = value; 
     element.title = d.innerText; 
    } 
}; 

例子:http://jsfiddle.net/mbest/TMSHB/2/

+0

哦,確定這是有道理的。謝謝! – KSletmoe