Доступ к содержимому с помощью Javascript

<noscript><div id="example">I want to get this innerHTML</div></noscript>

<script type="text/javascript"> alert($('example').innerHTML);</script>

этот фрагмент JavaScript просто возвращает пустую строку. Есть ли способ получить содержимое узла noscript?

p.s. Я использую prototype для этого конкретного проекта.

5 ответов


Если скрипты включены, элемент noscript определяется как содержащий только текст - хотя это должно быть parsable текст, с некоторыми ограничениями на контент. Имея это в виду, вы сможете извлечь текст, проанализировать его, а затем найти нужный элемент. Примитивный пример этого:--6-->

var nos = document.getElementsByTagName("noscript")[0]; 
// in some browsers, contents of noscript hang around in one form or another
var nosHtml = nos.textContent||nos.innerHTML; 

if ( nosHtml )
{
  var temp = document.createElement("div");
  temp.innerHTML = nosHtml;

  // lazy man's query library: add it, find it, remove it
  document.body.appendChild(temp);
  var ex = document.getElementById("example");
  document.body.removeChild(temp);

  alert(ex.innerHTML);
}

обратите внимание, что когда я первоначально написал этот ответ, выше не удалось в Google Chrome; доступ к содержимому noscript, похоже, несколько лучше поддерживается в эти дни, но он по-прежнему поражает меня как крайний случай, который, возможно, несколько более вероятен, чем другие элементы, чтобы показать ошибки - я бы избегал этого, если у вас есть другие варианты.


Я не уверен в прототипе, но это работает в Chrome с jQuery:

$('noscript').before($('noscript').text());

с HTML 4.0 spec:

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

  • пользовательский агент настроен не для оценки сценариев.
  • пользовательский агент не поддерживает язык сценариев, вызываемый элементом сценария ранее в документ.

Мне кажется, что это означает, что все содержимое тега NOSCRIPT (в данном случае ваш div) полностью игнорируется, если сценарии включены в браузере. Вы проверили, что" пример " div доступен через DOM вообще в вашем случае?


тестирование с Firefox 3.0.7, Safari 3.2.2 и MSIE 7.0.5730.13 (все на WinXP SP3) похоже, что все в <noscript> теги полностью опущены из дерева DOM.

возможно получить доступ к <noscript> сам элемент, однако, а затем используйте методы DOM для изменения его дочерних элементов.


попробуйте $($("noscript").text ()) с jQuery.