我确信这是一个多余的问题,但我已经找了一个小时左右,空手而归,所以希望有人可以提供帮助......
在搜索'Chicken'(或任何值)时,寻找一种使用JS(而不是jquery)返回下面li类的方法。
<li class='113252'>
<span>Chicken</span>
</li>
所以希望javascript在给定span值时返回li类(在本例中为Chicken)。
谢谢!
答案 0 :(得分:5)
试试这个:
var spanArray = document.getElementsByTagName('span');
for (var i=0; i<spanArray.length; i++) {
if(spanArray[i].innerHTML.toUpperCase() === 'CHICKEN')
{
alert(spanArray[i].parentNode.className);
break;
}
}
现在,我对jQuery更熟悉,但似乎在这里链接的小提琴中工作:http://jsfiddle.net/FranWahl/fCzYc/2/(更新后包含匹配后的建议break;
)
您可以为parentNode
添加更多类型检查以确保它是li
,依此类推,但这应该可以让您入门。
另外,我不确定这在大文档中的效率如何。
修改强>
阅读了一些评论后,我更新了上面的代码,以包含ajax333221建议的中断。
Dennis提到最好在getElementByTagName
上致电ul
。
鉴于您可以拥有li
而没有ul
我在此处将其添加为单独的代码,因为我不确定OP是否有ul
个标记。
查询每个ul
(jsFiddle here)
var ulArray = document.getElementsByTagName('ul');
var parentFound = false;
for (var i = 0; i < ulArray.length; i++) {
var spanArray = ulArray[i].getElementsByTagName('span');
for (var i = 0; i < spanArray.length; i++) {
if (spanArray[i].innerHTML.toUpperCase() === 'CHICKEN') {
alert(spanArray[i].parentNode.className);
parentFound = true;
break;
}
}
if(parentFound)
{
break;
}
}
答案 1 :(得分:0)
这绝不是完全完整的,这就是为什么你应该寻找一个库,但它做了两件事:
JSFiddle:http://jsfiddle.net/vol7ron/bttQN/
function getParentClass(element, parentTag){
if (element.tagName == parentTag.toUpperCase())
return element.className;
return getParentClass(element.parentNode,parentTag);
}
window.findParentClass = function (text,tagName){
var elements = document.getElementsByTagName('body');
for (var n=elements.length; n--;){
var foundClass = (function searchNextChild(el){
if (!el.children.length) {
if (el.textContent == text)
return getParentClass(el,tagName);
return;
}
for (var i=0, n=el.children.length; i<n; i++)
return searchNextChild(el.children[i]);
})(elements[n]);
return foundClass;
}
};
呼叫示例:
alert( findParentClass('Chicken','li') );