У меня есть базовый css:
#awesome1{
color: red;
}
и html:
<div id="awesome1"></div>
Я хочу изменить id awesome1
на awesome2
с помощью jQuery, но сохраните css из старого id.
Но когда я печатаю:
jQuery('#awesome1').attr('id', 'awesome2');
Он изменяет div
id в DOM, но, конечно, мой div
теряет color: red
.
Есть ли способ изменить "id in css" или "скопировать все атрибуты" (я не могу предположить, что только color
) от старого id до нового?
Обновление, уточнение:
Дело в том, что я меняю идентификатор на другой динамически, основываясь на некоторых данных ajax - я не знаю (в то время, когда я генерирую css), какой id он будет, поэтому я не могу предположить, что он будет awesome2
и сложным -кодировать его, например, css.
Ps Прежде чем публиковать новые ответы, прочитайте, прежде всего, жирный текст. Я знаю методы, когда я мог бы предположить, что будет новым идентификатором и жестким кодом для css, или отказаться от id для классов. Но в моем примере я не могу. И моя проблема похожа на тему: Измените идентификатор, но сохраните css, связанный со старым id в jQuery.
Этот плагин позволит вам скопировать css из одного элемента в другой
https://github.com/moagrius/copycss
Также аналогичный вопрос уже ответил на StackOverflow здесь → Может ли jQuery получить все стили CSS, связанные с элементом?
Как насчет добавления в CSS?
#awesome2{
color: red;
}
Или вместо использования CSS для ID используйте его в классе, подобном этому
<div id="awesome1" class="something"></div>
.something{
color: red;
}
Таким образом, вы всегда будете придерживаться того же стиля из класса, но можете использовать любой идентификатор, который вы хотите
Если все ваши теги id
начинаются со слова "awesome", вы можете изменить свой CSS:
[id^=awesome]{
color: red;
}
Если они просто содержат слово awesome, chante - каретку (^) в звездочку.
Тем не менее, я бы рекомендовал вам сделать шаг назад и подумать, не существует ли лучшего способа сделать то, что вы намерены.
<html>
<head>
<title>test</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.0.min.js"></script>
<style type="text/css">
div[id^=awesome] {
color: red;
}
</style>
<script type="text/javascript">
var something = function () {
jQuery('#awesome1').attr('id', 'awesome2');
}
</script>
</head>
<body>
<div id="awesome1">this is test</div>
</body>
</html>
jQuery('#awesome1').attr('id', 'awesome2');
$('#awesome2').css('color', 'red');
Существует всего два раза, когда вы должны ассоциировать CSS с идентификатором:
Если вы не хотите, чтобы все изменилось, даже если идентификатор элемента изменился, вам нужно использовать другой селектор для этих вещей. Я рекомендую использовать класс, что-то вроде этого CSS:
.awesome {
color: red;
/* other stuff that shouldn't change when the ID changes */
}
#awesome1 {
/* ID-specific CSS for #awesome1 */
}
#awesome2 {
/* ID-specific CSS for #awesome2 */
}
и этот HTML:
<div id="awesome1" class="awesome"></div>
Теперь, когда вы меняете идентификатор, элемент будет хранить вещи из своего.awesome класса, но измените в соответствии с его идентификатором для вещей, которые должны измениться для этого.