2010-09-25 13 views
0

Je suis en train de capturer htmltitre de capture et metatags d'un textarea

<title></title>

et Metadata de avec dans un form1 mais pas exactement comment le faire ...

Mon travail est de le faire comme: document.write(document.form1.title); ou document.write.texteara.(document.form1.title); mais cela ne fonctionne pas pour moi ...

<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> 

Des idées comment je peux capturer les métadonnées à l'intérieur d'une zone de texte?

Répondre

1

Une zone de texte contient une chaîne de texte simple. Il n'y a pas d'éléments ou de métadonnées.

<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> 

Ceci est incorrect, bien que les navigateurs généralement le corriger pour vous (jusqu'à ce que la séquence </textarea, de toute façon). Vous devez en code HTML et <& dans le contenu d'un <textarea> comme tout le contenu du texte et des valeurs d'attribut:

<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> 

Vous auriez alors à lire le contenu du textarea avec input.value comme avec tout autre domaine.

Si vous voulez analyser cette valeur de chaîne dans un document HTML et extraire des parties de celui-ci, vous aurez besoin de l'écrire à un élément en utilisant element.innerHTML= value et ensuite utiliser des méthodes DOM pour extraire des données de l'élément:

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

Malheureusement, IE ne peut pas le faire car il ne peut pas définir innerHTML sur <head> ou de nombreux autres éléments qui ne sont pas des éléments de bloc/en ligne normaux. Pour le faire fonctionner sur IE, vous auriez à utiliser un nouveau document complet pour le contenu d'entrer dans (quelle douleur):

<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> 

Il me semble très peu probable que ce soit une bonne idée. Le côté serveur ne peut-il pas générer une page qui transmet les informations que JavaScript doit utiliser d'une manière plus pratique pour JavaScript? par exemple. cracher une recherche codée JSON comme:

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