遇到麻烦,基本上试图创建一个可以用作选择器的变量.例如
- $('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的结果然后输出为:
html body div ul li:contains(‘hi’)