JQuery-如何向一些html添加单个html标记?

JQuery-如何向一些html添加单个html标记?,jquery,html,prepend,Jquery,Html,Prepend,我只想在下面的文本前插入一个字符(链接前): 因此,上面的内容变得 <li><a href=""><span>LINK</a></li> 这是我的JQuery代码: $('#mainnav li a').prepend('<span>'); $('mainnav li a')。前缀(''; 当我在firebug after中查看代码时,我看到了,如何只获取开始跨距标记而不获取结束标记?当您使用prepend时,

我只想在下面的文本前插入一个字符(链接前):

  • 因此,上面的内容变得

    <li><a href=""><span>LINK</a></li>
    
  • 这是我的JQuery代码:

    $('#mainnav li a').prepend('<span>');
    
    $('mainnav li a')。前缀('';
    

    当我在firebug after中查看代码时,我看到了
    ,如何只获取开始跨距标记而不获取结束标记?

    当您使用
    prepend
    时,您没有向页面添加标记文本,而是向页面添加元素。元素没有“开始”和“结束”标记,元素是元素。如果您想在
    span
    中包装一组元素(我猜这就是您想要的,如果您想在一个位置插入它的开头,在另一个位置插入它的结尾),您需要将span添加到容器中,然后将元素移动到其中

    例如,这会将所有链接移出元素
    foo
    ,并将它们移动到
    容器内的跨距中:

    var stuff;
    var container;
    
    stuff = $('#foo a');
    span = $("<span style='background-color: yellow'>");
    span.append(stuff);
    $('#container').append(span);
    
    var;
    var容器;
    stuff=$('fooa');
    span=$(“”);
    追加(东西);
    $('#container')。追加(span);
    
    首先,您需要的是格式错误的HTML。jQuery将使创建它变得非常困难(如果不是不可能的话)。我建议一步一个脚印,而不是多步。尝试:

    $("li > a").each(function() {
      $(this).contents().wrapAll("<span>");
    });
    
    $(“li>a”)。每个(函数(){
    $(this.contents().wrapAll(“”);
    });
    
    输入:

    <ul>
      <li><a href="...">testing</a></li>
      <li><a href="...">rich <b>content</b> with <i>inner tags</i></a></li>
    </ul>
    
    输出:

    <ul>
      <li><a href="..."><span>testing</span></a></li>
      <li><a href="..."><span>rich <b>content</b> with <i>inner tags</i></span></a></li> 
    </ul>
    

    我不知道你为什么想要它,但可以这样做

    $('#mainnav li a').html(function(i,v){
       return '<span>' + v;
    })
    
    $('mainnav li a').html(函数(i,v){
    返回“”+v;
    })
    
    许多jQuery方法被设计为仅从半写标记自动创建元素,例如,
    对于a.prepend()将导致整个span元素被添加到DOM中。或者,您将在Firebug中看到,
    首先插入到锚元素中

    我不明白为什么要创建无效的HTML,但如果必须创建,可以通过以下方式创建:

    $("li > a").html("<span>"+$("li > a").html());
    
    $(“li>a”).html(“+$(“li>a”).html());
    
    或者,正如Reigel所建议的那样,使用.html()方法的匿名函数(我很快写下了答案,显然是没有经过深思熟虑的):

    $(“li>a”).html(函数(idx,html){
    返回“”+html;
    });
    
    否则,您可能希望将锚点元素的内容包装在跨度中。在这种情况下,您应该使用以下选项之一:

    $(“li>a”).wrap(“”);
    

    您不需要自己创建起始元素和结束元素(在使用jQuery时)。

    我遇到了一个问题,当时我正在使用第三方API,该API使用php curl将平面HTML放置到我的网页中。在返回的api HTML中,有一些格式不正确的span标记正在破坏我在IE中的呈现。我使用Jquery的replaceWith()函数修复了这个问题。举个例子:

    格式错误的HTML:(注意未打开的span标记)

    
    
    我的解决方案:

    $('.aa_navlink').replaceWith('<span class="test"><a class="aa_float_right aa_navlink" href="http:whatever">My Account</a>');
    
    $('.aa_navlink')。替换为('';
    
    生成的HTML:

    <span class="test"><a class="aa_float_right aa_navlink" href="http:whatever">My Account</a></span>
    
    
    
    繁荣,我们现在有格式良好的HTML不,谢谢,所以蹩脚的第三方API的(我的意思是真的蹩脚)


    这个补丁是开发者在

    Um……上给我的。。。。你为什么要创建格式错误的HTML?好吧,我将添加结束标记,我需要首先整理开始标记:|你应该重新考虑你的设置。如果它依赖于创建格式不正确的HTML,那么可能应该将其重写为更可靠的内容(以及XML/HTMLish)。还是你对我们隐瞒了一个具体的原因?
    $("li > a").wrap("<span>");
    
    <a class="aa_float_right aa_navlink" href="http:whatever">My Account</a></span> 
    
    $('.aa_navlink').replaceWith('<span class="test"><a class="aa_float_right aa_navlink" href="http:whatever">My Account</a>');
    
    <span class="test"><a class="aa_float_right aa_navlink" href="http:whatever">My Account</a></span>