Вывод, к которому вы пришли, является исправленным: вы не можете отправить ввод в тег <div>
, это не так, как обычно работают браузеры (исключение из правила дано в " edit 2 * 1004" * ") . Исключение кода ясно говорит об этом - «Элемент должен быть редактируемым пользователем, чтобы очистить его». Независимо от того, что у div есть классовое значение «edit-cell» - это просто имя, выбранное разработчиком, для иллюстративного предложения; это не означает, что div сможет принимать данные.
Скорее всего, пользовательский интерфейс, используемый приложением, использует <div>
для стилизованного представления значений, установленных пользователем; есть скрытый элемент <input>
, который принимает фактические записи клавиатуры, и код JavaScript обновляет <div>
вместе с ними.
Вам нужно найти этот входной тег и настроить его для своих изменений.
edit1: поиск входных тегов по их значениям с помощью JS.
Вот как найти входной тег - в браузере (вручную) установите значение для строки, которая будет уникальной для страницы, например, «myMegaSpecialString». Затем запустите следующую консоль js:
[...document.getElementsByTagName("input")].forEach(function(el){ if (el.value == "myMegaSpecialString"){console.log(el);} })
Будет напечатано <input>
элементов, которые имеют это "специальное" значение.
edit2: поиск любых тегов по их значениям с помощью JS.
Согласно обсуждению в комментариях, элемент <input>
не был найден с таким значением. Как я справедливо исправил @Andersson, при особых обстоятельствах другие элементы, кроме input, могут получать, khm, input - они должны иметь атрибут contenteditable
, и он наследуется от родительских элементов - например, если установлен тег <body>
, вы можете ввести любой элемент на странице.
Итак - модифицированная версия javascript для определения «кто держит наше значение»; к счастью, getElementsByTagName()
поддерживает подстановочный знак для аргумента - это будет соответствовать любому элементу:
[...document.getElementsByTagName("*")].forEach(function(el){ if (el.value == "myMegaSpecialString"){console.log(el);} })
Это может быть немного медленнее - но должен напечатать элемент (ы) со свойством value
, равным "myMegaSpecialString".
edit3: поиск любых тегов по текстовому содержимому с помощью JS.
Квест продолжается - текст, который вы вводите, не появляется ни в одном элементе value
свойства? Нет проблем, давайте посмотрим на это в элементах текстового содержания.
Это может быть в том случае, если вы на самом деле редактируете содержимое <span>
, <div>
или подобных тегов (скрещенные пальцы ...:)) .
Это вариант предыдущей версии - вручную установите для текста значение, уникальное для всей страницы (чтобы ограничить вывод), и запустите его в консоли:
[...document.getElementsByTagName("*")].forEach(function(el){ if (el.textContent.indexOf("myMegaSpecialString") !== -1){console.log(el);} })
, который будет (должен? Может? Я больше ни в чем не уверен: D) вывести в консоль все элементы DOM, которые имеют эту строку как часть своего текста.
Разбивка, что есть в javascript, для будущих изменений:
document.getElementsByTagName("*")]
возвращает все элементы с таким именем тега в виде массива; звездочка аргумента (*
) - любое имя тега.
forEach
- цикл над элементами коллекции, передавая каждый из них анонимной функции в ней.
el.textContent
- возвращает текстовое содержимое узла (и его дочерних узлов).
indexOf()
- возвращает позицию аргумента в строке, -1
, если он не присутствует (используется indexOf()
против contains()
для совместимости, позднее в ES6).
- если условие возвращает true,
console.log(el)
напечатает его в консоли.