2012-09-20 64 views
2

我有这样的HTML代码:getElementsByClassName方法>让孩子

<div id="channels_0"> 
    <div id="channels"> 
     <h4 class="date"><span id="date">Sat 22nd Sep</span> @ 
     <span id="time">12:45</span></h4> 
     <h3 class="teems"><span id="date">Swansea City v Everton </span></h3> 
     <h4 class="tv"><span id="mychannels"></span>Sky Sports 2/Sky Sports 2 HD</h4> 
    </div> 
</div> 

我有这个JS:

document.getElementById('channels').innerText) 

,输出:

Sat 22nd Sep @ 12:45 
Swansea City v Everton 
Sky Sports 2/Sky Sports 2 HD 

我如何得到一个处理和输出个人项目,如:mychannels,或teems或时间或日期 即ie我需要得到的孩子,这是如何做到的?

我曾尝试:

document.getElementById('channels').getElementsByTagName('date').value; 

document.getElementsByClassName('date').value; 

等人,但仍不能似乎得到它的句柄。

+0

很多的se字段可以通过他们自己的ID立即访问。您在文档中的几个位置没有相同的ID,对吗? –

+0

你有没有试过document.getElementById('channels')。children? – Oofpez

+0

'getElementsByClassName'和'getElementsByTagName'返回一个_Node list_,即使它只有一个元素,所以'document.getElementsByClassName('MyClass')[0] .value'起作用,省略'[0]'虽然,它不会 –

回答

1
var channels = document.getElementById('channels'); 

var date = channels.getElementsByClassName("date")[0]; 
var datePart = date.getElementById("date").innerHTML; 
var timePart = date.getElementById("time").innerHTML; 

var teems = channels.getElementsByClassName("teems")[0]; 
var teemsDate = teems.getElementById("date").innerHTML; 

var tv = channels.getElementsByClassName("tv")[0]; 
var tvChannel = tv.innerText; 

另请注意,您的id s在整个文档中应该是唯一的。

DEMO

0

试试这个

document.getElementById('mychannels').innerHTML 

如果u dont有在不同的地方

1

相同的ID如果你需要把所有的根节点的直接后裔,利用这一点,

var rootChildren = document.getElementById('channels_0').childNodes; 

如果需要根节点的所有子节点,使用此

var allChildren = document.getElementById('channels_0').getElementsByTagName('*'); 

或获得根节点的所有跨度,因为多数民众赞成在文字,试试这个,

document.getElementById('channels').getElementsByTagName('span'); 

我不知道这是否是你想要完成的任务。虽然。

5

这些都是由同一个DOM为中心的JavaScript库,例如jQuery的,为此,该代码会容易得多任务:

$('#channels .date').text(); 

与本地方法来实现一个重要的事情是,而getElementById总会返回单个元素,像getElementsByClass这样的方法会返回元素的集合,这是您的代码无法工作的原因之一(另一个原因是value不是标准DOM元素属性:它用于检索表单元素的当前值)。

以下文档的方法,querySelectorAll作品在所有现代浏览器和IE 8版本向上(getElementsByClassName不能在IE工作,直到第9版):

document.querySelectorAll('#channels .date'); 

要得到任何元件的组合innerHTML这轮番上涨(在你的代码,它只是一个,但它可能是更多),您将需要存储在变量中的元素是集合,然后通过他们循环,并提取其逐一innerHTML

var dates  = document.querySelectorAll('#channels .date'); 
var datesText = (function(){ 
    var string = ''; 

    for(var i = 0; i < dates.length; i++){ 
     string += dates[i].innerText; 
    } 

    return string; 
}()); 
+0

嗨巴尼,谢谢你。 我试过这个:$('#channels .date')。text(); 并输出我的清单中的所有项目: 9月22日星期六@ 12:45 9月23日@ 13:30 9月23日@ 16:00Sat 9月29日@ 12:45 9月29日@ 17:30Sun 30th Sep @ 16:00 ....即所有的日期。 我如何得到第一个? – dmac

+0

我试图得到的数据在这里:http://www.visualdesign.ie/_dev/_tmp/www/epl.html – dmac

+0

'$('#channels .date:eq(0)')。text() '会得到第一个匹配元素的文本。 ':eq(0)'不是标准的CSS - 它是jQuery团队为DOM遍历而添加的东西:它假定任何选择器都可以返回任意数量的元素,并且传递给'eq'的数字决定哪一个出于此。好看的网站,顺便说一句。 – Barney