==
сравнивает ссылки на объекты в Java и не является исключением для объектов String
.
Для сравнения фактического содержимого объектов (в том числе String
) необходимо использовать equals
.
Если сравнение двух объектов String
с использованием ==
оказывается true
, это связано с тем, что объекты String
были интернированы, а виртуальная машина Java имеет несколько ссылки указывают на тот же экземпляр String
. Не следует ожидать сравнения одного объекта String
, содержащего то же содержимое, что и другой объект String
, используя ==
для оценки как true
.
Это альтернативное решение для рассмотрения, если по какой-либо причине решение Рори не может быть применено. Идеально просто переключить класс body
и использовать этот класс в качестве базового селектора . Недавно я применил этот метод для переключения приложения между темной и легкой темой, а затем сохранил его до localStorage
, так что изменения «запоминаются», например:
<style>
.nocturnal-theme p {
background: black;
color: white;
}
.diurnal-theme p {
background: white;
color: black;
}
</style>
<script>
/* Toggle Theme */
jQuery('.toggle-theme').on('click', function(){
if(jQuery(this).hasClass('toggle-diurnal')) {
jQuery('body').removeClass('diurnal-theme').addClass('nocturnal-theme');
localStorage.setItem('theme','nocturnal-theme');
} else if(jQuery(this).hasClass('toggle-nocturnal')) {
jQuery('body').removeClass('nocturnal-theme').addClass('diurnal-theme');
localStorage.setItem('theme','diurnal-theme');
}
var themeSet = localStorage.getItem('theme');
});
</script>
Сводка
id
), которые можно использовать, а так как редактирование основных файлов, включив их, не считается хорошей практикой (по причинам, которые здесь не будут затронуты) ), возможно, лучше сохранить эти файлы в переменных); .click()
из '#css_toggle'
метод .each()
используется для прокрутки всех экземпляров таблиц стилей (из которых, скорее всего, будет несколько), это также позволяет нам переопределить область действия $(this)
, которая будет полезна для продвижения вперед; link
в настоящее время в области имеет свой href
attribut e хранится в переменной; href
соответствующего элемента link
. Демонстрация фрагмента кода:
var defaultSS = '/wp-content/themes/RIP/assets/css/style.css',
altSS = '/wp-content/themes/RIP/assets/css/style1.css',
hrefAttr;
$('#css_toggle').click(function () {
$('link').each(function(){
hrefAttr = $(this).attr('href');
if (hrefAttr.indexOf(defaultSS) >= 0) {
$(this).attr('href', altSS);
console.log('Was:',hrefAttr);
console.log('Now:',$(this).attr('href'));
} else if (hrefAttr.indexOf(altSS) >= 0) {
$(this).attr('href', defaultSS);
console.log('Was:',hrefAttr);
console.log('Now:',$(this).attr('href'));
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="http://localhost:8888/rip-access/wp-content/themes/RIP/assets/css/style.css" type="text/css" media="all">
<button id="css_toggle" title="I'm a tooltip!">Text</button>
Вместо длинного href
используйте link[href*="style.css"]
, чтобы найти style.css
var click = false;
var path = '/rip-access/wp-content/themes/RIP/assets/css/';
$('#css_toggle').on('click', function() {
if (!click) {
$('link[href*="style.css"]').attr('href', path + 'style1.css');
click = true;
console.log('changed to style1.css');
} else {
$('link[href*="style1.css"]').attr('href', path + 'style.css');
click = false;
console.log('changed to style.css');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="css_toggle" title="I'm a tooltip!">Toggle</button>
<link href="/rip-access/wp-content/themes/RIP/assets/css/style.css" rel="stylesheet" />
А также вы можете использовать ID
вместо выбора по имени файла.
$('#css') // jquery selector
<link id="css" href="..." rel="stylesheet" /> // html
link
с экземпляром style.css
в строке (так как это сайт wordpress, будет обслуживаться несколько таблиц стилей из разных плагинов).
– UncaughtTypeError
12 December 2017 в 13:07
ID
.
– Pedram
12 December 2017 в 13:14
Лучшим и более надежным решением было бы использовать единую таблицу стилей и чередовать стиль, заставляя правила зависеть от класса на body
. Затем вы можете просто переключать этот класс, когда это необходимо, например:
$('#css_toggle').click(function() {
$('body').toggleClass('default highlight');
});
body.default .sq {
border: 1px solid #C00;
}
body.highlight .sq {
background-color: #CC0;
border: 2px dotted #C00;
}
.sq {
margin: 10px 0 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body class="default">
<button id="css_toggle" title="I'm a tooltip!">Text</button>
<div class="sq">
Foo
</div>
</body>
css
размер для некоторого случая. не мог сказать, что это здорово, но хорошее решение.
– Pedram
12 December 2017 в 13:19
Вы можете использовать detach, используя jquery
<script>
(function() {
var styles = {
light: $("#light").detach(),
dark: $("#dark")
};
$("input[name=chooseStyle]").click(function() {
var other = this.value === "light" ? "dark" : "light";
styles[this.value].appendTo('head');
styles[other].detach();
});
})();
</script>
Вы можете попробовать что-то вроде этого:
let test = true;
$('#css_toggle').click(function() {
if(test) {
$('link.sty').attr("href","style.css");
test = false;
} else {
$('link.sty').attr("href","style1.css");
test = true;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link class="sty" href="style.css" rel="stylesheet">
<button id="css_toggle" title="I'm a tooltip!">Text</button>
<div class="sq"></div>
Имеется запрошенный простой пример:
HTML:
<link rel="stylesheet" type="text/css" id='styles' href='path_to_your_style_1'>
<button id="css_toggle" title="I'm a tooltip!">Text</button>
JS:
$('#css_toggle').click(function () {
if ($("link[id='styles']").attr('href') == 'path_to_your_style_1'){
$("link[id='styles']").attr('href', 'path_to_your_style_2');
} else {
$("link[id='styles']").attr('href', 'path_to_your_style_1');
}
});