2011-12-03 81 views
2

在我創建,我讓最終用戶在「文本格式」前綴和後綴添加到一個jQuery倒計時的應用程序。
倒計時的元素通過AJAX獲取,並通過jQ插入到DOM中。jQuery的:追加和前面加上未關閉的HTML元素

這兩個區域的例子可以是:
前綴:<span style="color:blue">
後綴:</span>

我需要做的是什麼包裝所有需要這兩者之間的倒計時的代碼。
但是當我嘗試添加它們,所有的jQuery方法我試過(追加&前置)和PrototypeJS」 Element.insert()將關閉所有打開的標籤前綴,使後綴沒用。

我甚至試過如下:

$(this).parent().html(data['prefix'] + $(this).parent().html() + data['suffix']); 

這導致元件與DOM樹被刪除。還試圖在將其推回到.html()之前在本地存儲innerHTML並撥動它。

我不能這兩個領域的結合在了一起,並在其上使用.wrap(),如其中一方可以是完全完美的HTML字符串。

<span class='tag'>This is a tag</span> 

如果我試圖用對.wrap(),我想我的代碼的其餘部分最終會內部的。

+0

你能爲我們提供的jsfiddle? –

+0

你可以做一個[jsfiddle](http://www.jsfiddle.net),它不是很清楚你在做什麼,很難提供正確的答案。 –

+0

@ maxedison製作了一個jsfiddle,它完全展示了我想要達到的目標。 http://jsfiddle.net/xPb2a/ – MartinAronsen

回答

0

我會用.wrap(),但檢查第一,看它是否是一個完整的標記:

變種openTag = prefix.split(」「)[0] .slice(1); //導致像 '跨度' 或 'DIV' 變種closingTagExists = prefix.slice(prefix.length - openTag.length - 3)=== '';

如果(closingTagExists){ myEl.before(前綴)。經過(後綴); } else { myEl.wrap(prefix); }

這裏是一個活生生的例子:

http://bugs.jquery.com/ticket/5317 

你可以做財產以後這樣的:

function GetCodeFromServer(){ /*...*/ return "code from server"; } 

function Build(){ 
    var code = GetCodeFromServer(); 
    var $myTag = $("<span />").append(code); 
    //if you want append to any container 
    $("#anyDivContainer").append($myTag); 
} 

嘗試http://jsfiddle.net/xPb2a/

+0

首先,感謝您的時間!它幾乎像一個魅力一樣工作。如果您將兩個案例合併在我的初始文章中,「標籤」和着色,則後者被排除。 http://jsfiddle.net/xPb2a/1/ – MartinAronsen

+0

的確如此。但是,在這裏你沒有足夠的方法來弄清楚如何處理這種情況? – maxedison

+0

經過一段時間的盯着這個,離開了一段時間後又回到它,我決定我整個操作過度。有一種方法可以在櫃檯之前和之後添加文字,我需要的只是樣式化整個文章的一種方式。在它附近添加了一個「styleHolder」包裝器,我只需要從AJAX響應中編寫style屬性。幾乎相同的功能,但最終用戶不必擔心的領域。 – MartinAronsen

0

嘗試此插件:

$.fn.surroundWith = function(a,b) { 

    return this.each(function() { 

      var id='dummy'+$.now(); 

      $('<div class="'+id+'">'+a+'<span class="'+id+'"/>'+b+'</div>') 
      .insertAfter(this) 
      .find('span.'+id) 
       .replaceWith(this) 
       .end() 
       .replaceWith(
          function() { 
          return $(this).contents(); 
          }); 

    })}; 

代替使用渦卷()它的目標後注入一個片段,該片段是建立這樣的:

$(prefix+placeHolder+suffix) 

插入該片段後,所述佔位符元素將被目標取代。

您可以在此進行測試:http://jsfiddle.net/doktormolle/yUAVk/