从textarea捕获标题和元标记

时间:2010-09-25 18:49:15

标签: javascript xhtml asp-classic

我正在尝试捕获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>

我是如何从textarea中捕获元数据的?

1 个答案:

答案 0 :(得分:1)

textarea包含一个简单的文本字符串。没有元素或元数据。

<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)。您必须在<的内容中对&<textarea>进行HTML编码,就像所有文字内容和属性值一样:

<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和任何其他字段一起阅读textarea的内容。

如果要将该字符串值解析为HTML文档并提取其中的一部分,则需要使用element.innerHTML= value将其写入元素,然后使用DOM方法从元素中提取数据: / p>

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需要以更方便的方式使用的信息吗?例如。吐出JSON编码的查找,如:

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