我想知道李的身份
I want to find out id of ul li a
我正在编写一个自动化脚本。我正在处理ajax下拉列表。当点击文本框[input type=text ]
时,它会生成一个ul列表。像这样:
<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" id="ui-id-121" tabindex="0" style="z-index: 100002; display: block; top: 26px; left: 0px; width: 392px;">
<li class="ui-menu-item" role="presentation"><a id="ui-id-327" class="ui-corner-all" tabindex="-1"><span style="display:inline-block;">Select Org Unit</span></a></li>
<li class="ui-menu-item" role="presentation"><a id="ui-id-328" class="ui-corner-all" tabindex="-1"><span style="display:inline-block;">10</span></a></li><li class="ui-menu-item" role="presentation"><a id="ui-id-329" class="ui-corner-all" tabindex="-1"><span style="display:inline-block;">1A</span></a></li>
</ul>
它总是生成一个唯一的id,所以我不能使用id进行点击。有什么方法可以让我通过text/val找到,然后获取id并点击它吗?
您可以将相应的ID获取为:
$("ul li a").on('click', function(){
var myID = $(this).attr('id');
});
这就是你可以比较的方式我假设你的类名对所有li标签都是一样的:
$("li.ui-menu-item").each(function(){
if($(this).children().children().text()==10)
var id=$(this).children().attr("id");
$("#"+id).on("click", function () {
alert("clicked");
});
});
您需要使用事件委派,因为您说过,列表是通过ajax加载的。因此,为<ul>
元素添加click listener,并只过滤链接<a>
,它是<li>
的子级,如下所示:
HTML
<ul>
</ul>
JavaScript
$("ul").on('click', 'li a', function(){
console.log('ID:', $(this).attr('id'));
});
// Just a simulation for dynamically loaded elements/links
setTimeout(function() {
var list = [];
for(var i = 0 ; i < 10 ; ++i) {
list.push('<li><a href="#" id="ID-' + i + '">Link-' + i + '</a></li>');
}
$('ul').html(list.join(''));
}, 2000);
请参阅jsbin
不确定您想要获得什么,但您可以使用:contains根据文本内容选择您要查找的节点。例如:
$("ul > li.ui-menu-item > a:contains('1A')").click();
这将在第二菜单项上的元素上发出click
事件;假设文本内容是唯一的。
您也可以使用检索id
var id = $("ul > li.ui-menu-item > a:contains('1A')").attr('id');
当然还有添加click
监听器等等。一旦你有了正确的选择器来寻址元素,你就可以做你需要的一切。
更新
不幸的是,在常规的DOM API中没有类似于:contains
的内容可用于querySelector
/querySelectorAll
。在JavaScript中,您需要执行额外的代码,以便具有类似的功能,同时在可读性方面也是如此。使用ES6方法,如Array的find和String的includes,您可以编写以下内容:
// Array's method cannot be used directly on value from `querySelectorAll`;
// because such method returns a NodeList; so we need a
// generic to use on Array-like object
var find = Function.call.bind(Array.prototype.find);
// this function creates a function to use as predicate
// in `find` using the text given
var contains = function(text) {
return function (element) { return element.textContent.includes(text) }
}
// once you have such functions, you can write:
var a = document.querySelectorAll("ul > li.ui-menu-item > a");
find(a, contains("1A")).click();
我之所以不使用arrow函数,只是因为如果您的环境还不支持ES6,您可以很容易地使用文档中提供的垫片,在文档中,除非您不使用transiler,否则您不能"垫片"语法(否则,您可以使用arrow的函数使contains
更具可读性)。
- 调试一个简单的jQuery函数;想知道是否与其他代码冲突
- 我想知道如何在javascript中进行表单验证
- 我创建了一个Javascript待办事项列表,但想知道如何在浏览器刷新后保留这些帖子
- 我想知道李的身份
- 我想知道facebook是如何将你发布的内容(如网络链接)更改为对话框中的小部件的
- 发现这个讨厌的代码,我想知道它有什么作用?我应该担心吗..
- 我想知道“./”和“/”之间的区别
- 我想知道如何只激活表单提交,而不获取jquery中ajax url的值
- 我想知道如何创建一个自定义对话框,当点击按钮时会弹出
- 我想知道我在(Internet Explorer)上触发上下文菜单的图像的url
- 想知道我是否可以在不了解高级JavaScript的情况下开始学习Angularjs
- 我有类似的代码,我想知道是否有办法使它简短
- 我想知道如何将iMacro发送到某条线路
- 我想知道是否可以使用 node.js 在窗口之间发送数据
- 想知道如何调试 Node.js学习节点“filter ls”练习
- 编程弹道学.想知道这个 dy 计算
- 正在遵循 ReactJS 教程,并想知道扩展它的教学内容
- 我想知道是否可以更改形状的属性 z 索引?诺基亚地图API
- 我想知道在 jsp 中执行操作所花费的时间.如何做到这一点
- 这两个jQuery语句中没有错误,但我只是想知道为什么