захват заголовка и метатегов из текстовой области - PullRequest
0 голосов
/ 25 сентября 2010

Я пытаюсь захватить html

<title></title>

и Metadata из с в form1, но не совсем уверен, как это сделать...

Моя задача состоит в том, чтобы сделать это следующим образом: document.write(document.form1.title); или document.write.texteara.(document.form1.title);, но это не работает для меня ...

  <textarea name="textarea" id="textarea" cols="45" rows="5"><title>This is the title tag extracted</title><meta name="keywords" content="test 1, test 2, test3" /></textarea>
  </label>
</form>
<script type="text/javascript" src="<%= g_page_site_actual %>/js/jquery-1.4.2.min.js"></script>
<script language="JavaScript"><!--
if (document.getElementsByName) {
  var metaArray = document.getElementsByName('Author');
  for (var i=0; i<metaArray.length; i++) {
    document.write(metaArray[i].content + '<br>');
  }

  var metaArray = document.getElementsByName('Description');
  for (var i=0; i<metaArray.length; i++) {
    document.write(metaArray[i].content + '<br>');
  }

  var metaArray = document.getElementsByName('Keywords');
  for (var i=0; i<metaArray.length; i++) {
    document.write(metaArray[i].content + '<br>');
  }
}
document.write(document.form1.title);
//--></script>

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

1 Ответ

1 голос
/ 25 сентября 2010

Текстовое поле содержит простую строку текста. Нет элементов или метаданных.

<textarea name="textarea" id="textarea" cols="45" rows="5"><title>This is the title tag extracted</title><meta name="keywords" content="test 1, test 2, test3" /></textarea>

Это недопустимо, хотя браузеры обычно исправляют его (во всяком случае, до последовательности </textarea). Вы должны HTML-кодировать < и & в содержимом <textarea>, как и все текстовое содержимое и значения атрибутов:

<textarea name="textarea" id="textarea" cols="45" rows="5">&lt;title>This is the title tag extracted&lt;/title>&lt;meta name="keywords" content="test 1, test 2, test3" /></textarea>

Затем вы прочитали бы содержимое текстовой области с помощью input.value, как и с любым другим полем.

Если вы хотите проанализировать это строковое значение в HTML-документе и извлечь его части, вам нужно записать его в элемент, используя element.innerHTML= value, а затем использовать методы DOM для извлечения данных из элемента:

var el= document.createElement('head');
el.innerHTML= document.getElementById('textarea').value;
alert(el.getElementsByTagName('title')[0].firstChild.value);
alert(el.getElementsByTagName('meta')[0].content);

К сожалению, IE не может этого сделать, потому что не может установить innerHTML на <head> или многих других элементах, которые не являются обычными блочными / встроенными элементами. Чтобы заставить его работать в IE, вам нужно будет использовать новый документ, чтобы в него можно было войти (как больно):

<iframe id="iframe"></iframe>
<script type="text/javascript">
    var iframe= document.getElementById('iframe');
    var idoc= 'contentDocument' in iframe? iframe.contentDocument : iframe.contentWindow.document;
    idoc.write(document.getElementById('textarea').value);
    idoc.close();
    alert(idoc.title);
    alert(idoc.getElementsByTagName('meta')[0].content);
</script>

Мне кажется очень маловероятным, что это хорошая идея. Разве вы не можете на серверной стороне сгенерировать страницу, которая передает информацию, необходимую для использования JavaScript, более удобным для JavaScript способом? например. выплюнуть JSON-кодированный поиск как:

<script type="text/javascript">
    var info= {
        "title": "This is the title tag extracted",
        "keywords": ["test 1", "test 2", "test3"]
    };
</script>
...