2

我有这个代码:

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

我想abc@gmail.com使用普通的 JavaScript

我虽然这样做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 和其他库使用的选择器引擎,可以减轻您处理跨浏览器内容的负担。

使用querySelectorAllor Sizzle 时,您可以通过删除.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 );
} );

Usingchildren[0]使您可以抓取元素的子元素,而firstElementChild仅获取第一个元素子元素(而不是节点子元素,因为空格是节点子元素,而您不希望这样做)。

forEach, getElementsByClassName, textContent,firstElementChild甚至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 回答