Доступ к содержимому <noscript>с помощью Javascript - PullRequest
19 голосов
/ 07 марта 2009
<noscript><div id="example">I want to get this innerHTML</div></noscript>

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

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

p.s. Я использую прототип в этом конкретном проекте.

Ответы [ 5 ]

14 голосов
/ 07 марта 2009

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

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, кажется, поддерживается в несколько раз лучше, но он все еще кажется мне крайним случаем, который, возможно, несколько более вероятен, чем другие элементы, чтобы показать ошибки - я бы избежал этого, если у вас есть другие варианты.

4 голосов
/ 08 июня 2011

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

$('noscript').before($('noscript').text());
3 голосов
/ 07 марта 2009

Из спецификации HTML 4.0 :

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

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

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

3 голосов
/ 07 марта 2009

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

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

2 голосов
/ 18 августа 2012

Попробуйте $ ($ ("noscript"). Text ()) с помощью jQuery.

...