2011-12-03 44 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/