我遇到了由PHP代码动态创建的目标元素的问题。我想要做的是toggle()元素。这是数据库中最新空缺的新闻源。
我使它工作但是通过手动编写jquery代码来定位元素是非常低效的:
$('#clickMe1').click(function(event){
event.preventDefault();
$('#targetCollapse1').toggle();
if ($('#targetCollapse1').is(":visible"))
{
$('#change-icon1').removeClass('fa-plus').addClass('fa-minus');
}
else
{
$('#change-icon1').addClass('fa-plus').removeClass('fa-minus');
}
});
$('#clickMe2').click(function(event){
event.preventDefault();
$('#targetCollapse2').toggle();
if ($('#targetCollapse2').is(":visible"))
{
$('#change-icon2').removeClass('fa-plus').addClass('fa-minus');
}
else
{
$('#change-icon2').addClass('fa-plus').removeClass('fa-minus');
}
});
如何只制作一段此代码并申请1-5的数字。我尝试在for循环中制作但仍然没有成功?
这是html / php代码,看看那里发生了什么。顺便说一句,我使用CodeIgniter和解析类,所以{vacancies} {/ vacancies}是for循环
<ul class="vacancies">
{vacancies}
<a href="#" id="clickMe{num}">
<li>
<i class="fa fa-plus" id="change-icon{num}"></i><i class="fa fa-code"></i><span class="job-title">{job_title}</span>
<span class="job-pubdate">{pubdate}</span>
<div class="description" id="targetCollapse{num}">{job_descr}</div>
</li>
</a>
{/vacancies}
</ul>
答案 0 :(得分:1)
试试这个:
$('[id^=clickMe]').click(function(event){
event.preventDefault();
var number=$(this).attr('id').substr($(this).attr('id').length-1); //get the number at the end of the id
$('#targetCollapse'+number).toggle();
if ($('#targetCollapse'+number).is(":visible"))
{
$('#change-icon'+number).removeClass('fa-plus').addClass('fa-minus');
}
else
{
$('#change-icon'+number).addClass('fa-plus').removeClass('fa-minus');
}
});
<强>更新强>
我说的这行var number=$(this).attr('id').substr($(this).attr('id').length-1);
获取被点击元素的id
属性,然后获取它的最后一个字符(使用substr())并将其存储在名为{{的变量中1}}
答案 1 :(得分:0)
滥用HTML元素id不是一个好习惯(但它不会造成伤害)。
您可以在事件处理程序中使用this
来标识触发事件的元素。为了找到里面的元素,jQuery提供了children
方法。
所以这是我的解决方案。
在你的模板中:
<ul class="vacancies" id="vacancies">
<li>
<a href="#" data-id="{num}">
<i class="fa fa-plus change-icon"></i>
<i class="fa fa-code"></i><span class="job-title">{job_title}</span>
<span class="job-pubdate">{pubdate}</span>
<div class="description">{job_descr}</div>
</a>
</li>
</ul>
在你的javascript中:
$('#vacancies').on('click', 'a', function(event) {
// var num = $(this).attr('data-id');
// {num} in template, but it seems useless in this case
var $desc = $(this).children('.description'),
$icon = $(this).children('.change-icon');
// you can use children to locate children elements, no need to assign id
$desc.toggle(); // toggle visibility
if ($desc.is(':visible')) {
$icon.removeClass('fa-plus').addClass('fa-minus');
} else {
$icon.removeClass('fa-minus').addClass('fa-plus');
}
/*
or simply use toggleClass
$icon.toggleClass('fa-minus').toggleClass('fa-plus');
*/
event.preventDefault();
});
答案 2 :(得分:0)
试试这个......
$('[id^='clickMe').click(function(event){
event.preventDefault()
var i = this.id.replace('clickMe','');
$('#targetCollapse' + i).toggle();
if ($('#targetCollapse' + i).is(":visible"))
{
$('#change-icon' + i).removeClass('fa-plus').addClass('fa-minus');
}
else
{
$('#change-icon' + i).addClass('fa-plus').removeClass('fa-minus');
}
});