Вместо того, чтобы заменять его содержимое, просто примените к нему класс, который заставит его отобразить нужный текст.Таким образом, вам не нужно беспокоиться о сохранении значения где-то, когда вы хотите вернуть его.
$(function() {
$("td").click(function() {
// remove .chosen class from all tds
$('td').removeClass("chosen")
// add it to clicked one
$(this).addClass("chosen");
});
});
Самый простой способ не отображать содержимое элемента и заменить его некоторым текстом:
element {
visibility: hidden;
}
element:before {
visibility: visible;
contents: 'The replacement content'
}
Но проблема в том, что :before
и :after
плохо играют с элементами таблицы, поэтому нам нужен небольшой скрипт, который захватывает содержимое каждого td
и упаковывает их в <span>
, когдастраница загружается, поэтому мы можем применить вышеописанный метод к элементу <span>
:
$("td").each(function(){
$(this).html($('<span />', {
html: $(this).html()
}))
})
Посмотрим, работает ли он:
$(function() {
$("td").click(function() {
$('td').removeClass("chosen")
$(this).addClass("chosen");
}).each(function() {
$(this).html($('<span />', {
html: $(this).html()
}))
})
});
table,th,td {
border: 1px solid black;
background-color: deeppink;
font-size: 15px;
}
td {
width: 100px;
padding: 1rem;
text-align: center;
}
.chosen span {
visibility: hidden;
}
.chosen span:before {
visibility: visible;
content: 'Chosen'
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table style="font-size:20px">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
</table>