2

私はこのコードを持っています:

<li class="email">
    <a href="mailto:abc@gmail.com">abc@gmail.com</a>
</li>

プレーンな JavaScriptabc@gmail.comを使用して取得したい

document.getElementsByTagName("email")は上記のことを行うことを考えていますが、続行する方法がわかりません。

ユーザーによる以下の回答の助けを借りて、解決策を見つけることができました

var elem = document.querySelectorAll('.email');
var email = elem[0].children[0].innerHTML;
4

4 に答える 4

4
var elems = document.querySelectorAll('.email');
for(var i = 0; i < elems.length; i++) {
    var elem = elems[i];
    console.log(elem.firstElementChild.getAttribute('href').substr(7));
}

デモ: http://jsfiddle.net/ThiefMaster/Cx2VY/

ただし、document.querySelectorAllすべてのブラウザで使用できるわけではありません。あなたのために働くものdocument.getElementsByClassName)もあります。しかし、他のブラウザにはどちらもありません。jQuery などが必要ない場合は、 Sizzleを追加することを検討してください。これは、jQuery やその他のライブラリで使用されるセレクター エンジンであり、クロスブラウザーのものを処理する負担を取り除きます。

または Sizzleを使用する場合、代わりにセレクターをquerySelectorAll削除して使用することで、コードをさらに簡単にすることができます。.firstChild.email > a

于 2012-05-03T07:16:37.030 に答える
1

あなたのコードに間違いがあります。「a」要素を取得するには、このようにする必要があります

var email=document.getElementsByClassName('email')[0].getElementsByTagName('a')[0];

これでメール オブジェクトができました。次に、このようにメール オブジェクトを使用して残りを処理できます。

 alert(email.innerHTML); // will print abc@gmail.com
于 2012-05-03T07:28:37.930 に答える
1

クロスブラウザ ソリューションが必要ですか? クロスブラウザはどれくらい?

最新のブラウザのみのソリューションは次のとおりです。

[].forEach.call( document.getElementsByClassName( 'email' ), function( el ) {
    console.log( el.firstElementChild.textContent );
} );

を使用children[0]すると、要素の子をクロールしますfirstElementChildが、最初の要素の子のみを取得します (スペースはノードの子であり、それを望まないため、ノードの子は取得しません)。

forEachgetElementsByClassNametextContentfirstElementChildさらにquerySelectorAllはクロスブラウザーではありません (従来のブラウザーでは動作しません)。

しかし、 を使用したいquerySelectorAllということは、少なくとも IE9 をサポートしていることを意味します (IE8 ではバグがあり、IE7 では実装されていないため)。IE9 は、上記のすべてのメソッドをサポートしています。

于 2012-05-03T07:30:41.143 に答える
0

これはもっとクロスブラウザだと思います:

function getElsByClassName(classname){
    var rv = []; 
    var elems  = document.getElementsByTagName('*')
    if (elems.length){
        for (var x in elems ){
            if (elems[x] && elems[x].className && elems[x].className == classname){
                rv.push(elems[x]);
            }
        }
    }
    return rv; 
}

//Get the li
var li = getElsByClassName("email"); //Alass, it returns an array
var a = li[0].firstChild; 
var email = a.getAttribute('href').substr(7);
于 2012-05-03T07:25:12.930 に答える