тег изменения jquery - PullRequest
       2

тег изменения jquery

4 голосов
/ 11 сентября 2011

У меня есть этот код, который не работает, вы можете мне помочь?Я хочу, чтобы я изменил имя тега "p" класса = "s7" на "h1"

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

Ответы [ 3 ]

6 голосов
/ 11 сентября 2011

Проблема в том, что вы сопоставляете все элементы с классом 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 голосов
/ 11 сентября 2011

Вам не хватает закрывающей скобки, и вы используете this в неверном контексте:

$(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 голос
/ 11 сентября 2011

Значение this в вашем вызове replaceWith () не будет элементом "s7";это будет все, что this находится в большом обработчике "document.ready".

Чтобы делать то, что вы хотите, используйте ".each ()":

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

С этимверсия, jQuery будет вызывать функцию «каждый» для каждого элемента с классом «s7».Более того, внутри этого вызова функции jQuery организует для this ссылку на один из этих элементов DOM на каждой итерации.

Чтобы дополнительно уточнить разницу, учтите, что в моей и вашей версии аргумент "replaceWith"() "вычисляется до вызова " .replaceWith () ".То есть выражение конкатенации строк, включающее $(this), вычисляется перед вызовом функции.Таким образом, у this просто нет возможности принять значение любого элемента в цепочке;JavaScript просто не работает таким образом.

С помощью цикла ".each ()" мы можем убедиться, что this имеет полезное значение.Обратите внимание, что ".each ()" также передает ссылку на текущий элемент DOM в качестве явного параметра, поэтому код также может выглядеть следующим образом:

  $('.s').each(function(index, element) {
    $(element).replaceWith($('<h1>' + $(element).html() + '</h1>'));
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...