2014-04-30 53 views
1

代碼:與更換裏面的textarea HTML標記文本

<script src="Scripts/jquery-1.8.2.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     var $this = $("#Test_txtarea"); 
     var txtval = $this.val(); 
     $this.find("img").each(function() { 
      var imgbytes = $(this).attr("name"); // extract bytes from selected img src 
      $(this).replaceWith(imgbytes); 
     }); 
     $("#NewVal").html(txtval); 
    }); 
</script> 

HTML

<textarea ID="Test_txtarea" >Hi <img src='test.png' name='test' > kifak <img src='test2.png' name='test1' > Mnih <img src='test3.png' name='test3' ></textarea> 
<span id="NewVal" ></span> 

什麼,我試圖做的基本上是試圖通過它的名字來代替每個img標籤所以最終textarea的值會是這樣的:嗨test kifak test1 Mnih test3

這是的jsfiddle:http://jsfiddle.net/Ga7bJ/2/

.find("img")總是返回0作爲length.how我可以修復此代碼嗎?

+0

jsfiddle請。 – Hugo

+1

你在'textarea'裏面有'img'標籤? – user25312

+0

請所有檢查我的更新和是的,我有一個IMAG標籤內的文本區 – Sora

回答

1

看看這個。是什麼是:

它從您的Test_txtarea獲取值,並將其設置爲隱藏div的html。
隱藏的div將渲染textarea中的圖像。
他們已經被渲染後,我發現這些圖片,
- 獲得源代碼,
- 刪除所有字符.
後 - 更換了與SRC圖像的完整的HTML。
完成上述工作後,您剩下的div就是您想要的值。
接下來所做的一切就是將div中的html複製到textarea的值。

function replaceImageWithSrc(value){ 
     var div = $("#invisible"); 
     div.html(value); 
     var images = div.find("img"); 
     images.each(function(index){ 
      var src = $(this).attr("src").split(".")[0]; 
      this.outerHTML = src; 
     }); 
    return div.html(); 

}  
$(document).ready(function() { 
     var txtArea = $("#Test_txtarea"); 
     var txtval = txtArea.val(); 
     txtval = replaceImageWithSrc(txtval); 
     txtArea.val(txtval); 
    }); 
2

雖然不是完整的答案,或者至少不會是「複製粘貼」的答案,有幾件事情你需要做的位置:

  1. textarea的內容是它的VAL,而不是innerHTML之中。所以,你必須選擇這些內容作爲價值,並創建一個隱藏的div並將其作爲HTML。一旦你做到了,你現在可以很容易地找到使用find的HTML標籤。

  2. 一旦你找到的標籤,你可以使用attr()功能

  3. 一旦你的名字,比你再回去的textarea的VAL(),並做正則表達式替換或使用HTML可以替換爲找到名稱以及我猜,但不知道。

+0

我不確定你可以使用'attr()'如果標籤被解釋爲純文本。 – user25312

+1

這就是爲什麼我把它放在隱藏的div中,首先,它變成了DOM對象,因此你可以訪問它。 –

+0

是否有更好的方法來做到這一點? – Sora

1

以下代碼適用於我。基本上,我得到了文本區域的價值,並將其附加到屏幕外div上。現在我有了有效的標記嵌套,我可以正常地迭代子節點。

function byId(e){return document.getElementById(e)} 
function newEl(t){return document.createElement(t)} 
function test() 
{ 
    var div = newEl('div'); 
    div.innerHTML = byId('Test_txtarea').value; 
    var msg = ''; 
    var i, n = div.childNodes.length; 
    for (i=0; i<n; i++) 
    { 
     if (div.childNodes[i].nodeName == "IMG") 
      msg += div.childNodes[i].name; 
     else if (div.childNodes[i].nodeName == "#text") 
      msg += div.childNodes[i].data; 
    } 
    byId('NewVal').innerHTML = msg; 
}