При использовании JavaScript для сокрытия кнопок, Вы открываете дыру в системе безопасности в приложении. Злонамеренный пользователь мог или отключить JavaScript или применить некоторых собственных для обхождения безопасности.
я предлагаю использовать PHP для, принял решение или представить кнопки или нет. Я делаю это в.NET довольно часто.
необходимо быть в состоянии проверить доступ пользователя на серверной стороне каждый раз, когда они пытаются использовать ограниченную кнопку также.
Firefox uses the W3C-compliant textContent property.
I'd guess Safari and Opera also support this property.
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;
}
}
Если вам нужно только установить текстовое содержимое, а не извлекать его, вот простая версия 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));
}
Обновление : Я написал сообщение в блоге , в котором все различия намного лучше подробно описаны.
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 и рекурсивно собирать текстовые узлы.
jQuery предоставляет метод .text ()
, который можно использовать в любом браузере. Например:
$('#myElement').text("Foo");
Это был мой опыт работы с 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
; которые я не комментировал выше.