如何在JavaScript中按类获取HTML元素?

时间:2011-11-25 19:13:31

标签: javascript

我正试图通过getElementsByClass()来操纵HTML,但由于某种原因它不起作用。当我使用document.getElementByID()时,它有效吗?这是为什么?

<div class='boldStuff'> <p>Welcome to the site. </p> </div>

<script type="text/javascript">
    document.getElementsByClass('boldStuff').innerHTML = 'Fred Flinstone';
</script>

5 个答案:

答案 0 :(得分:6)

尝试:

document.getElementsByClassName('boldStuff')[0]

答案 1 :(得分:2)

这是一个受到广泛支持的解决方案:

function getElementsByClassName( root, clss ) {

    var result = [], els, i;

    if( arguments.length < 2 || !root || !clss || root.nodeType !== 1 ) {
        return result;
    }

    clss = clss + '';

    if( root.getElementsByClassName ) {
        result = root.getElementsByClassName( clss );
    } else if( root.querySelectorAll ) {
        result = root.querySelectorAll( '.' + clss );
    } else {
        els = root.getElementsByTagName('*');
        clss = " " + clss + " ";
        for( i = 0; i < els.length; ++i ) {
            if( ( " " + els[ i ].className + " " ).indexOf( clss ) !== -1 ) {
                result.push( els[ i ] );
            }
        }
    }
    return result;
}

然后像这样使用它:

var bold = getElementsByClassName( document, "boldStuff" );

for( var i = 0; i < bold.length; ++i ) {
    bold[ i ].innerHTML = 'Fred Flinstone';
}

这样做的好处是它尽可能使用原生方法。

  • 它首先尝试getElementsByClassName,因为它通常最快。

  • 然后尝试querySelectorAll,这将支持IE8

  • 最后,它会对提供的根目录下的所有元素进行手动过滤。

答案 2 :(得分:1)

getElementsByClassName返回NodeList。你将不得不使用

document.getElementsByClassName('boldStuff')[0].innerHTML

请参阅mdn的docs

答案 3 :(得分:0)

正确的调用方法是getElementsByClassName(),它会为您提供一系列元素。

document.getElementsByClassName('boldStuff')

无论如何这与旧的IE版本不兼容。检查兼容性here

答案 4 :(得分:0)

它返回一个数组,所以设置数组的innerHTML的第一个元素

document.getElementsByClassName('boldStuff')[0].innerHTML = 'Fred Flinstone';