2011-09-11 172 views
4

我有这个代码不起作用,你能帮我吗?我想,我改变标签名称“P”级=“S7”到“H1”jquery更改标签

<script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      $(".s7").replaceWith($('<h1>' + $(this).html() + '</h1>'); 
     }); 
    </script> 
+0

在你的榜样,会发生什么?并且这不会成为你的文档吗? –

回答

6

的问题是,你匹配的所有元素与类s7,但你需要逐一处理它们,以便将其内容复制到新的元素。在您当前的代码中,this始终为document,而不是当前元素。

您可以使用each()遍历匹配的元素:

$(".s7").each(function() { 
    var $this = $(this); 
    $this.replaceWith($("<h1>" + $this.html() + "</h1>")); 
}); 

或许:

$(".s7").each(function() { 
    $("<h1>" + $(this).html() + "</h1>").replaceAll(this); 
}); 
4

你缺少一个右括号,然后你使用在错误的情况下:

$(document).ready(function(){ 
    $(".s7").replaceWith($('<h1>' + $(".s7").html() + '</h1>')); 
}); 

http://jsfiddle.net/L82PW/

如果您有与s7类名称的多个元素,请使用.each()

$(document).ready(function(){ 
    $(".s7").each(function(){ 
     $(this).replaceWith($('<h1>' + $(this).html() + '</h1>')); 
    }); 
}); 
1

您的“replaceWith()”调用中的this的值不会是“s7”元素;这将是什么this是在更大的“document.ready”处理程序。

做你想做的,用什么“每()”:

$('.s7').each(function() { 
    $(this).replaceWith($('<h1>' + $(this).html() + '</h1>')); 
    }); 

与该版本,jQuery将要求带班‘S7’每个元素‘每个’功能。此外,在该函数调用中,jQuery还会安排this在每次迭代中引用其中一个DOM元素。

为了进一步阐述差异,请考虑在我的版本和您的“replaceWith()”参数之前“.replaceWith()”被调用。也就是说,在函数调用之前评估涉及$(this)的字符串连接表达式。因此,this没有办法链接链中任何元素的值; JavaScript根本无法这样工作。但是,使用“.each()”循环,我们可以确保this具有有用的值。需要注意的是“每()” 传递到当前的DOM元素作为一个明确的参数的引用,因此代码还可以是这样的:

$('.s').each(function(index, element) { 
    $(element).replaceWith($('<h1>' + $(element).html() + '</h1>')); 
    }); 
+1

你在那里错过了''''。 –

+0

哎呀是的,我刚刚看到你的答案,并检查我的:-)谢谢! – Pointy