我有一个菜单-每个菜单项都有一个类名。当我单击菜单项时,我正在使用JQuery查找具有匹配ID名称的div。问题在于搜索不严格。如果某些东西具有像elo-1这样的类名,而我的div ID分别是elo-1和elo-11,则没有办法(我这样做的方式)只能得到elo-1。
我想要一个精确的匹配。我想单击elo-1,只得到elo-1,而不是elo-1,elo-11,elo-12等。有人有什么想法吗?
这是我正在使用的代码:
$(document).ready(function() {
var myLayoutId = $(this).attr("layoutId");
$("#start_page").show().siblings().hide();
$("#navBar").hide();
$("#refs").hide();
$("li").click(function() {
var thisID = $(this).attr("class");
$("#mainBdy div:#"+thisID).show().siblings().hide();
$('#mainBdy div[id^="'+thisID+'"]').show();
$("#mainBdy div:#"+thisID).css("width","30%");
$("#mainBdy div:#"+thisID).css("margin-left","-80px");
$("#mainBdy div:#"+thisID).css("margin-top","-50px");
$("#mainBdy div:#"+thisID).css("float","left");
});
$("#start_page_accept").click(function() {
$("#navBar").show();
$("#refs").show();
$("#start_page").hide().next().show();
});
$("#menu").collapsible({
effect: "slide", // The effect to use when expanding and collapsing the menu.
initialCollapse: true // When true, collapses the menu when the page loads.
});
});
最佳答案
修改选择器,避免以匹配开头:
$('#mainBdy div[id^="'+thisID+'"]').show();
这匹配任何以您的值开头的东西,而不是您想要的东西:
$('#mainBdy div[id="'+thisID+'"]').show();
这仅匹配其id属性等于您的值的那些项目。
其他建议
另请注意,您要绑定到单个列表项:
$("li").click();
由于您要为页面上放置的每个新列表项添加事件处理程序,因此这可能成为应用程序的任务。事件委托是一种更好的方法,包括将一个事件处理程序添加到祖先元素,使用事件冒泡来响应嵌套项目上的事件。
<ul id="list">
<li class="edo-1">Edoine Mashlup</li>
</ul>
假设这是我们的标记(为更好地衡量,又扔了100个列表项),以下是我们的事件委托指令:
$("#list").on("click", "li", function () {
$("#" + this.className).show().css({
width: '30%',
marginLeft: '-80px',
marginTop: '-50px',
float: 'left'
})
.siblings().hide();
});
每当在
#list
元素上或我们的li
元素内发生点击事件时,我们都会评估目标(接收点击的元素)是否与选择器相匹配。如果是这样,我们将触发我们的函数-否则,我们将忽略它并让它冒泡DOM。关于jquery - 使用另一个元素的className通过ID查找元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13568106/