Если я нахожусь над элементом TD, я хочу выделить часть строки в другом TD. Пример: если я наведите курсор на яблоко, я хочу выделить яблочную часть applebanana.
Я пробовал несколько вещей, но не стал ближе к любому решению. Спасибо за помощь.
Мой код до сих пор: нельзя использовать слово param, потому что он не определен. this.innerText не возвращает "яблоко". Также onMouseout удаленная часть строки удаляется.
function hightlightInput(word){
$(document.getElementById("testid")).html($(document.getElementById("testid")).html().replace(new RegExp("(apple)(?![^\">]*\"[^>]*>)", "i"), "<mark>$1</mark>"));
}
function resetHighlight() {
$(document.getElementById("testid")).find("mark").replaceWith(function() {
return $(document.getElementById("testid")).contents();
});
}
HTML
<table>
<tr>
<td onMouseOver="hightlightInput(this.innerText)"onMouseOut="resetHighlight()">apple</td>
<td id="testid">applebanana</td>
</tr>
</table>
В этих ситуациях я всегда использую regexp и помещаю текст в элемент <mark>
, который я удаляю позже.
Затем вы можете улучшить его, указав цвета и добавив их как стиль в элемент метки, но по умолчанию он дает желтый фон для текста (в большинстве браузеров). Элемент метки легко найти назад и обычно не используется ни для чего другого, поэтому он идеально подходит для этих вещей.
HTML:
<table>
<tr><td id="change">applebanana</td></tr>
<tr><td onMouseOver="highlightInput(this, this.textContent)"onMouseOut="resetHighlight(this)">apple</td></tr>
</table>
Здесь решение полностью в native JS:
function highlightInput(element, word) {
element.innerHTML = element.innerHTML.replace(new RegExp("(" + word + ")(?![^\">]*\"[^>]*>)", "i"), "<mark>$1</mark>");
}
function resetHighlight(element) {
var marks = element.getElementsByTagName("mark");
var marksLength = marks.length;
for(var i = (marksLength - 1); i >= 0; --i)
{
element.replaceChild(document.createTextNode(marks[i].innerText), marks[i]);
}
}
Скрипт: http://jsfiddle.net/gpgekko/LshW6/1/
Вот решение, использующее библиотеку jQuery:
function highlightInput(element, word) {
$(element).html($(element).html().replace(new RegExp("(" + word + ")(?![^\">]*\"[^>]*>)", "i"), "<mark>$1</mark>"));
}
function resetHighlight(element) {
$(element).find("mark").replaceWith(function() {
return $(this).contents();
});
}
Скрипт: http://jsfiddle.net/gpgekko/LshW6/
Я оставлю адаптацию, чтобы найти все элементы, чтобы подчеркнуть вас, сообщите мне, если вам нужна помощь в этом. Но, возможно, просто просматривая таблицу для появления слова, если я правильно прочитал ваш вопрос.
$(element).html()
вокруг заменяющего кода, чтобы установить новое значение. Смотрите обновленный ответ.