2014-11-25 70 views
0
<form class="register"> 
    <div class="form-group"> 
     <input type="submit" value="Signup" class="btn btn-submit" /> 
    </div> 
    <div class="form-group needAccount" id="req_val"> 
     <a href="#" class="toggleForms">Login from here</a> 
    </div> 
</form> 

现在我想遍历这种形式,并获得最后div#req_val所有的父母,所以输出应该是一个字符串即获取所有家长,并将它们存储在字符串

form.register div.form-group.needAccount#req_val 
+0

DIV#req_val只有一个在给定的代码父。清楚地解释你的问题,并试图获得输出结果。 – prakashstar42 2014-11-25 06:34:54

+0

其实我正在研究PHP的HTML DOM爬虫,我需要从用户中选择元素,然后抓取所选元素的HTML。这就是为什么我想要点击元素的所有父母。 – 2014-11-25 11:08:53

回答

1

您可以通过父母的穿越使用.parents()并自己生成。请参阅下面的实现:

// returns <tag-name>[.<class1>[.<class2>] ...][#<id>] for the passed element 
function getSelector(_elem) { 
    var parts = [_elem.tagName].concat(_elem.className.split(/\s+/).map(function(_class) { 
     return (_class ? '.' + _class : ''); 
    })); 
    _elem.id && parts.push('#' + _elem.id); 
    return parts.join(''); 
} 

var elem = $('#req_val'), parents = elem.parents(), str = []; 
parents.each(function() { // add parents 
    str.unshift(getSelector(this)); // unshift since parents() gives you the nearest parent first 
}); 
str.push(getSelector($('#req_val')[0])); // add self 
str = str.join(' '); // join with space 

console.log(str); 

演示:http://jsfiddle.net/wu41vwuf/

1

您可以使用parents().parentsUntil()(如果你需要停止在表格)。

由于.parents()不包含当前元素本身,所以您需要将其设置为.add()。然后通过集合.map()并为集合中的每个元素创建一个字符串。使用.get()将DOM元素从jQuery集合中取出,然后将.join()它们转换为字符串。

在下面的代码片段中,我已经在form的周围添加了一个div,以便您知道.parents()是如何遍历树的。

段:

var $parents = $("#req_val").parents().add("#req_val"); 
 
var str = $parents.map(function() { 
 
    var retVal = this.tagName; 
 
    retVal += this.id ? '#' + this.id : ''; 
 
    retVal += this.className ? '.' + this.className.replace(' ', '.') : ''; 
 
    return retVal; 
 
}).get().join(' '); 
 

 
$("#result").text(str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <form class="register"> 
 
     <div class="form-group"> 
 
      <input type="submit" value="Signup" class="btn btn-submit" /> 
 
     </div> 
 
     <div class="form-group needAccount" id="req_val"> <a href="#" class="toggleForms">Login from here</a> 
 

 
     </div> 
 
    </form> 
 
</div> 
 
<hr /> 
 
<p id="result"></p>

相关问题