2014-08-31 31 views
0

比方说(只是为了测试),我有这样的代码:获取子元素的已知父里面,与孩子的ID已知*部分*

<div class="p1"> 
    <div class="fortest"> 
    <span id="title1"></span> 
    <span id="words1"></span> 
    </div> 
</div> 
<div class="p2"> 
    <span id="title2"></span> 
    <span id="words2"></span> 
</div> 

现在让我们说我有“P1” DIV中变量:var节点。 我所知道的是 - 我的节点var中有一个标题,它是一个id为“title”的元素。

我该怎么做: 1)在我目前的父母内部递归搜索这个孩子。 2)只能通过它的ID substr(“标题”部分)进行搜索。 3)完成功能,当我找到它。

请给我一个生动的例子,如果你可以:) 谢谢!

+0

如果你现在写这个代码,我会避免这样的结构,这是一个很大的字符串处理。使用多个班级,例如而不是解析ID。否则,你可能会得到最好的正则表达式。 – 2014-08-31 14:34:24

+0

我知道它好多了,但它不在我的控制之下,我不能把任何类或属性放到DOM中。不幸的是,我需要的解决方案正是我需要的示例:) – FED 2014-08-31 14:38:01

+0

由于ID必须是唯一的,因此不需要任何种类的递归搜索。 – Stuart 2014-08-31 14:38:22

回答

3

您可以使用querySelector和css 'starts-with' attribute selector此:

var p1 = document.querySelector('.p1'), 
    titleChild = p1.querySelector('[id^="title"]'); 
+0

完美!谢谢:) 有没有任何跨浏览器的风险? 此外 - 我可以在哪里了解更多关于如何以及何时可以使用css选择器?我会很高兴为裁判。谢谢! – FED 2014-08-31 15:22:23

+0

这在IE8中不受支持,但我认为任何人都不支持现代Web应用程序中的IE8。如果你真的需要IE8,你可以使用垫片:https://gist.github.com/chrisjlee/8960575 – Tudmotu 2014-08-31 16:58:32

0

这是你如何能做到这一点递归,如果由于某种原因你不想使用queryselector

function getChildByPrefix(parent, prefix) { 
    var i, child; 
    if (parent.id.substr(0, prefix.length) == prefix) { 
     return parent; 
    } 
    for (i = 0; i < parent.children.length; i++) { 
     child = getChildByPrefix(parent.children[i], prefix); 
     if (child) { 
      return child; 
     } 
    } 
} 

+0

非常感谢:) – FED 2014-09-01 20:40:28