'innerText' работает в IE, но не в Firefox

При использовании JavaScript для сокрытия кнопок, Вы открываете дыру в системе безопасности в приложении. Злонамеренный пользователь мог или отключить JavaScript или применить некоторых собственных для обхождения безопасности.

я предлагаю использовать PHP для, принял решение или представить кнопки или нет. Я делаю это в.NET довольно часто.

необходимо быть в состоянии проверить доступ пользователя на серверной стороне каждый раз, когда они пытаются использовать ограниченную кнопку также.

288
задан Ray Vega 31 August 2009 в 10:17
поделиться

6 ответов

Firefox uses the W3C-compliant textContent property.

I'd guess Safari and Opera also support this property.

247
ответ дан 23 November 2019 в 01:45
поделиться

As per Prakash K's answer Firefox does not support the innerText property. So you can simply test whether the user agent supports this property and proceed accordingly as below:

function changeText(elem, changeVal) {
    if (typeof elem.textContent !== "undefined") {
        elem.textContent = changeVal;
    } else {
        elem.innerText = changeVal;
    }
}
21
ответ дан 23 November 2019 в 01:45
поделиться

Если вам нужно только установить текстовое содержимое, а не извлекать его, вот простая версия DOM, которую вы можете использовать в любом браузере; он не требует ни расширения IE innerText, ни свойства textContent ядра DOM уровня 3.

function setTextContent(element, text) {
    while (element.firstChild!==null)
        element.removeChild(element.firstChild); // remove all existing content
    element.appendChild(document.createTextNode(text));
}
81
ответ дан 23 November 2019 в 01:45
поделиться

Обновление : Я написал сообщение в блоге , в котором все различия намного лучше подробно описаны.


Firefox использует стандарт W3C Node :: textContent , но его поведение "немного" отличается от собственного innerText MSHTML (также скопированного Opera некоторое время назад среди десятков других функций MSHTML).

Прежде всего, textContent представление пробелов отличается от представления innerText . Во-вторых, что более важно, textContent включает все содержимое тега SCRIPT , а innerText - нет.

Чтобы сделать вещи более интересными, Opera - помимо реализации стандартного textContent ] - решил также добавить MSHTML ' s innerText , но изменил его так, чтобы он действовал как textContent , то есть включая содержимое SCRIPT (на самом деле, textContent и innerText в Opera, похоже, создают идентичные результаты, вероятно, просто наложенные друг на друга).

textContent является частью интерфейса Node , тогда как innerText является частью HTMLElement . Это, например, означает, что вы можете «получить» textContent , но не innerText из текстовых узлов:

var el = document.createElement('p');
var textNode = document.createTextNode('x');

el.textContent; // ""
el.innerText; // ""

textNode.textContent; // "x"
textNode.innerText; // undefined

Наконец, Safari 2.x также содержит ошибки innerText реализация. В Safari innerText работает правильно, только если элемент textContent и innerText в Opera, похоже, дают одинаковые результаты, вероятно, просто наложенные друг на друга).

textContent является частью интерфейса Node , тогда как innerText является частью HTMLElement . Это, например, означает, что вы можете «получить» textContent , но не innerText из текстовых узлов:

var el = document.createElement('p');
var textNode = document.createTextNode('x');

el.textContent; // ""
el.innerText; // ""

textNode.textContent; // "x"
textNode.innerText; // undefined

Наконец, Safari 2.x также содержит ошибки innerText реализация. В Safari innerText работает правильно, только если элемент textContent и innerText в Opera, похоже, дают одинаковые результаты, вероятно, просто наложенные друг на друга).

textContent является частью интерфейса Node , тогда как innerText является частью HTMLElement . Это, например, означает, что вы можете «получить» textContent , но не innerText из текстовых узлов:

var el = document.createElement('p');
var textNode = document.createTextNode('x');

el.textContent; // ""
el.innerText; // ""

textNode.textContent; // "x"
textNode.innerText; // undefined

Наконец, Safari 2.x также содержит ошибки innerText реализация. В Safari innerText работает правильно, только если элемент означает, что вы можете «получить» textContent , но не innerText из текстовых узлов:

var el = document.createElement('p');
var textNode = document.createTextNode('x');

el.textContent; // ""
el.innerText; // ""

textNode.textContent; // "x"
textNode.innerText; // undefined

Наконец, Safari 2.x также имеет ошибочную реализацию innerText . В Safari innerText работает правильно, только если элемент означает, что вы можете «получить» textContent , но не innerText из текстовых узлов:

var el = document.createElement('p');
var textNode = document.createTextNode('x');

el.textContent; // ""
el.innerText; // ""

textNode.textContent; // "x"
textNode.innerText; // undefined

Наконец, Safari 2.x также имеет ошибочную реализацию innerText . В Safari innerText работает правильно, только если элемент ни скрытые (через style.display == "none" ), ни потерянные из документа. В противном случае innerText приведет к пустой строке.

Я играл с абстракцией textContent (чтобы обойти эти недостатки), но она оказалась довольно сложной .

Лучше всего сначала определить ваши точные требования и следовать оттуда. Часто можно просто удалить теги из innerHTML элемента, вместо того, чтобы обрабатывать все возможные отклонения textContent / innerText .

Другое. возможность, конечно, состоит в том, чтобы пройти по дереву DOM и рекурсивно собирать текстовые узлы.

280
ответ дан 23 November 2019 в 01:45
поделиться

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

$('#myElement').text("Foo");
25
ответ дан 23 November 2019 в 01:45
поделиться

Это был мой опыт работы с innerText , textContent , innerHTML и значением:

// elem.innerText = changeVal;  // works on ie but not on ff or ch
// elem.setAttribute("innerText", changeVal); // works on ie but not ff or ch
// elem.textContent = changeVal;  // works on ie but not ff or ch
// elem.setAttribute("textContent", changeVal);  // does not work on ie ff or ch
// elem.innerHTML = changeVal;  // ie causes error - doesn't work in ff or ch
// elem.setAttribute("innerHTML", changeVal); //ie causes error doesn't work in ff or ch
   elem.value = changeVal; // works in ie and ff -- see note 2 on ch
// elem.setAttribute("value", changeVal); // ie works; see note 1 on ff and note 2 on ch

ie = internet explorer , ff = firefox, ch = google chrome. примечание 1: ff работает до тех пор, пока значение не будет удалено с помощью backspace - см. примечание Рэя Веги выше. примечание 2: отчасти работает в хроме - после обновления он не изменяется, затем вы щелкаете мышью и снова щелкаете в поле, и появляется значение. Лучшим из всех является elem.value = changeVal ; которые я не комментировал выше.

0
ответ дан 23 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: