Здравствуйте!
Написал функцию, которая изменяет tagName
элемента. Всё работает отлично, но не задача! Все остальные функции, которые идут после этой, не работают. А если указать до функции замены tagName
, то всё хорошо.
В общем, код с проблемой:
function tagName(elem, tagName) {
$(elem).replaceWith(elem.outerHTML.replace(/^\<[^ ]+(.*)\<\/[^ ]+\>$/, '<'+tagName+'$1</'+tagName+'>'));
};
$(function() {
$(document).on('click', '.block', function() {
tagName(this, 'span');
$(this).css('background', 'black'); // А это где? Фон остался белым!
});
});
.block {
display: block;
width: 200px;
height: 200px;
}
div.block {border: 2px solid red}
span.block {border: 2px solid blue}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="block"></div>
Может кто знает способ получше, как заменить tagName
без этой "ошибки"? Заранее благодарю.
В данном случае функция не меняет tagName, а удаляет старый элемент и добавляет новый. Таким образом в разметке уже не старый элемент, на который ссылается this
, а новый созданный, поэтому последующее применение к this
$(this).css('background', 'black');
Не приносит результат.
Это поведение изменить невозможно, так как, невозможно изменить значение на которое будет ссылаться this внутри функции.
В качестве обходного пути, стиль должен применяться к новому созданному элементу, для этого его нужно вернуть из функции tagName
Пример:
function tagName(elem, tagName) {
var el = $(elem.outerHTML.replace(/^\<[^ ]+(.*)\<\/[^ ]+\>$/, '<' + tagName + '$1</' + tagName + '>'));
$(elem).replaceWith(el);
return el;
};
$(function() {
$(document).on('click', '.block', function() {
tagName(this, 'span')
.css('background', 'black'); // А это где? Фон остался белым!
});
});
.block {
display: block;
width: 200px;
height: 200px;
}
div.block {
border: 2px solid red
}
span.block {
border: 2px solid blue
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="block"></div>
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Какой js код позволяет при перезагрузке странице или вообще при ее первом посещение - автоматически выбрать какой-нибудь элемент(по нажатию...
Как правильно сделать отправку $get из js в php и обратно Есть код
Здравствуйте, мне встретился код, не могу понять использование побитового оператора ~ в проверке на наличие подстроки в строке