Значение 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>'));
});