*這必須在JavaScript中完成,而不是在jQuery中完成。檢查javascript中的while循環中的元素類
我想要做的就是抓住h4
標籤的innerText
<a>
與類btn-blue
被點擊時。
我意識到,我可以這樣做:
element.parentElement.previousElementSibling.children[0].innerText;
但我真的想要的東西更加靈活。
這是我到目前爲止,並且它在我在控制檯(chrome)中運行時工作,但是一旦我將它添加到站點,它就不會拉入h4標記的innerText 。
HTML
<div class="border-box clearfix">
<div class="blah">
<h4>h4 Title</h4>
<p>paragraph</p>
</div>
<div class="head clearfix">
<h4>h4 Title</h4>
<p>paragraph</p>
</div>
<p class="float-right">
<a href="/transactions/" class="btn-blue">anchor tag</a>
</p>
</div>
的JavaScript
var el = document.getElementsByClassName('head')[0];
var parent = el.parentElement;
while(parent && parent !== document.body && parent.className && parent.className.indexOf('head'){
parent = parent.previousElementSibling;
}
var children = parent.childNodes;
for(i=0; i < children.length; i++){
var name = children[i].tagName;
if(name.toLowerCase() === 'h4'){
var text = children[i].innerText || children[i].textContent;
return text;
}
}
我相信這個問題是在while循環使用parent.className.indexOf('head')
。我試圖確定的是,如果元素具有頭部類,並且從SO問題(javascript - Test if an element contains a class),我已經看到我可以執行indexOf來檢查頭部是否在課堂中。
我也讀過,我可以使用.classList.contains('head')
,但不包括對早期IE瀏覽器的支持。
兩個問題:
上午我在儘可能最好的方式獲得的
<h4>
標籤的innerText
? (這可能更適合codereview.stackoverflow.com)。測試一個元素在while循環中是否有類的最好方法是什麼?
SOLUTION:
我結束了使用@格雷格薄瑞光的解決方案僅僅是因爲它是最容易讓我調整和實施在谷歌代碼管理工具。最終的代碼如下所示:
function(){
var element = {{gtm.element}};
var elementClass = 'border-box';
while(element && !((" " + element.className + " ").indexOf(" " + elementClass + " ") > -1)){
element = element.parentNode;
}
return element.querySelector('h4').innerText || element.querySelector('h4').textContent;
}
如果有人想玩弄他可能叉[此普拉克(http://plnkr.co/edit/yBbY73AIhv55wfu0ehNy p =預覽)。 – surfmuggle
'HTML'是否總是與您的帖子中的HTML類似? (我的意思是層次結構)。你的頁面中是否會有1個或多個'anchor'標籤? –
@ W.D。整個頁面將會有多個'anchor'標籤。考慮一下我提供的「HTML」塊作爲博客文章中的一篇博文(多篇博文摘要)。有道理? – Blexy