2015-05-13 6 views
0

Я следующий кодИзменение внутренней HTML при нажатии клавиши Javascript

function kpress(){ 
 
    document.getElementById("editable").innerHTML = document.getElementById("editable").innerHTML.replace("this","that"); 
 
}
<div id="editable" contenteditable="true" style="width:100px;height:100px" onkeypress="kpress()"></div>

Проблема Я не хочу, чтобы заменить старый innerHTML с innerHTML с заменой() метод вместо этого я хочу что-то вроде этого

document.getElementById("editable").innerHTML.replace("this", "that"); 

Вместо

document.getElementById("editable").innerHTML = document.getElementById("editable").innerHTML.replace("this", "that"); 
+0

Нужно ли использовать собственный JavaScript, потому что jQuery имеет функцию .text(), которая делает то, что вы просите довольно легко. –

+1

Возможный дубликат [javascript заменить текст в теге html] (http://stackoverflow.com/questions/5558613/javascript-replace-text-in-the-html-body) –

+0

@SergeyDenisov Оригинальная замена, которую я хочу реализовать так выглядит 'innerHTML.replace (RegularExpression, " $ 1 ");' Где «RegularExpression» - это регулярное выражение, которое совпадает с числом, а «$ 1» - это подстрока, которая соответствует регулярному выражению – EMM

ответ

1

внутреннийHTML либо получает, либо устанавливает HTML для элемента. При использовании innerHTML вот так: innerHTML.replace("this","test") вы фактически получаете HTML в виде строки и применяете метод replace к строке. При использовании innerHTML в контексте Element.innerHTML = вы устанавливаете значение HTML. See here for reference.

Вот чистый способ осуществить то, что вы хотите с JavaScript: JSFiddle Example

document.getElementById("editable").onkeypress = function(){ 
 
    this.innerHTML = this.innerHTML.replace("this","that"); 
 
}
#editable { 
 
    width:100px; 
 
    height:100px; 
 
    border:1px #ccc solid; 
 
}
<div id="editable" contenteditable="true"></div>

+1

Ницца! Вы могли бы сделать его еще более чистым, как 'this.innerHTML = this.innerHTML.replace (« this »,« that »);» и сэкономить на этом дополнительном обходе DOM. – Thriggle

+0

Хороший вопрос! Просто сделал это редактирование. Спасибо за вход! –

0

JQuery делает этот путь проще, и к сожалению, я не знаю способ заменить текст в строке без необходимости повторять эту строку. Я думаю, что самое вы можете сделать, это сделать код более удобным для чтения и только сделать поиск элемента один раз:

var editableElement = document.getElementById("editable"); 
editableElement.innerHTML = editableElement.innerHTML.replace("this", "that"); 
1

При использовании равнины Javascript вы должны назначить что-то к innerHTML для того, чтобы изменить его.

Собственный метод замещения возвращает строку , но не модифицирует DOM.

Вы можете сделать это немного короче, но не можете избежать шагов 1) получить элемент 2) изменить его значение.

var ed = document.getElementByID("editable"); 
ed.innerHTML = ed.innerHTML.replace("this","that");