如何通过JavaScript获取类的内容

How to get contents of class through JavaScript

本文关键字:获取 何通过 JavaScript      更新时间:2023-09-26

我需要使用 JavaScript 来获取用户名,该用户名按以下方式发布:

<div id="project_user">
    <p class="project_user">
        by <span class="project_username"><?php echo $OwnerName; ?></span>
     </p>
</div>

我该怎么做?

我尝试了以下方法,但没有用:

document.getElementById('project_username').innerHTML

您需要按id选择,而需要按className选择:

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

现场演示

请注意,document.getElementsByClassName在旧的IE版本中没有实现...


另一种方式:

document.getElementById('project_user')
        .getElementsByTagName('span')[0].innerHTML;

现场演示


您可以使用此"补丁"在旧浏览器中定义此功能:

if (!document.getElementsByClassName) {
    document.getElementsByClassName = function(classname) {
        var elArray = [];
        var tmp = document.getElementsByTagName("*");
        var regex = new RegExp("(^|''s)" + classname + "(''s|$)");
        for (var i = 0; i < tmp.length; i++) {
            if (regex.test(tmp[i].className))
                elArray.push(tmp[i]);
        }
        return elArray;
    };
}​


或者使用像jQuery这样的javascript库来实现(几乎(所有css选择器,例如:

$('.project_username').html();

哪个浏览器支持哪种方法?

document.getElementById仅在元素具有id='targetvalue'时才有效。上面的示例显示了 class 属性中的值,而不是 id

您可以使用 getElementsByClassName ,尽管这在 IE8 或更低版本中不受支持。还有document.querySelectorAll,它在IE中的支持稍好一些。

嗯,浏览器支持图表很漂亮

您可以在 http://www.quirksmode.org/dom/w3c_core.html#gettingelements 上查看浏览器对各种使元素联机的方法的支持。

独自完成的冗长

制作广泛的跨浏览器兼容解决方案可能很冗长:

var parent = document.getElementById("project_user"),
    element;
// If the browser supports querySelectorAll, use it.
if ( parent.querySelectorAll ) {
  element = parent.querySelectorAll('.project_username')[0];
// Else, if getElementsByClassName is supported, use it.
} else if ( parent.getElementsByClassName ) {
  element = parent.getElementsByClassName('project_username')[0];
// Else, roll up our sleeves, let's do this the hard way
} else {
  var spans = parent.getElementsByTagName("span"), 
      spani = spans.length;
  while ( spani-- ) {
    if ( spans[spani].className === "project_username" ) {
      element = spans[spani];
      break;
    }
  }
}

使用出色工具的简洁性

或者你可以使用类似jQuery的东西来减少你的挫败感:

var $element = $(".project_username");

尝试:

var project_username = document.getElementById('project_user').getElementsByClassName('project_username')[0].innerHTML;
alert(project_username);

或者使用jQuery要容易得多:

var project_username = $('.project_username');
alert(project_username);
document.getElementsByClassName()不像

IE 8不支持它那样跨浏览器兼容,你可能不得不在不支持的地方编写自己的getElementsByClassName((。

这是一个替代:

var projUser = document.getElementById('project_user');
var projUsername = projUser.getElementsByTagName('span')[0]; // If you need 1st span's content
var userame = projUsername.innerHTML;

您也可以将其写在一行中。

var userame = document.getElementById('project_user').getElementsByTagName('span')[0].innerHTML;