我需要使用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
答案 0 :(得分:6)
您需要id
选择,而需要通过className
选择:
document.getElementsByClassName('project_username')[0].innerHTML
请注意,旧的IE版本中未实现document.getElementsByClassName
...
另一种方式:
document.getElementById('project_user')
.getElementsByTagName('span')[0].innerHTML;
<强> Live DEMO 强>
你可以使用这个&#34;补丁&#34;在旧浏览器中定义此功能:
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
这样实现(几乎)所有css选择器的javascript库,例如:
$('.project_username').html();
答案 1 :(得分:1)
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");
答案 2 :(得分:0)
尝试:
var project_username = document.getElementById('project_user').getElementsByClassName('project_username')[0].innerHTML;
alert(project_username);
或者使用jQuery更容易:
var project_username = $('.project_username');
alert(project_username);
答案 3 :(得分:0)
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;