遇到麻烦,基本上试图创建一个可以用作选择器的变量.例如
$('a').click(function(){ var selector = $(this).dompath(); });
HTML:
html body div div /div /div ul li li /ul div ul li li li hello world /ul /div body html
这将返回类似的东西
path = html body div ul li:contains('hello world')
然后我可以在选择器中使用它来选择这个div,所以如果我喜欢
$(path).text() would return "hello world"
非常感谢!
解决方法
也许是这样的:
function dompath( element ) { var path = ''; for ( ; element && element.nodeType == 1; element = element.parentNode ) { var inner = $(element).children().length == 0 ? $(element).text() : ''; var eleSelector = element.tagName.toLowerCase() + ((inner.length > 0) ? ':contains(\'' + inner + '\')' : ''); path = ' ' + eleSelector + path; } return path; }
这修改了另一个问题的方法,只有当标签没有子标签时才通过:contains()运算符添加标签的全文内容.
我用这种方法测试过:
$(document).ready(function(){ $('#p').click(function() { console.log(dompath(this)); }); });
反对这个:
<html> <body> <div> <div> </div> </div> <ul> <li></li> <li></li> </ul> <div> <ul> <li id="p">hi</li> <li></li> <li id="p2">hello world</li> </ul> </div> <body> <html>
单击p的结果然后输出为:
@H_404_36@html body div ul li:contains(‘hi’)