2011-09-11 211 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