我在同一页面上有多个无序列表(确切地说是一个手风琴)。每个列表项都有一个唯一的id,基本上是用户生成的字符(因此可以是任何东西)。我正在尝试将每个唯一ID转换为小写,并将任何空格替换为连字符。
我正在玩的代码位于.each
函数内,因为在同一页面上有多个手风琴,它仍然输出用户生成的ID而不是转换后的ID:
$('ul.responsive-accordion').each(function() {
var question = $('ul.responsive-accordion').find('li');
var questionhash = $(question).attr('id');
convertedhash = questionhash.toLowerCase().replace(/ /g, '-');
});
当我使用下面的输出到控制台时,它只输出第一个项目ID两次而不是其他项目(在这个例子中应该显示另外3个列表项目ID):
// Replace spaces with hyphens
var question = $('ul.responsive-accordion').find('li');
var questionhash = $(question).attr('id');
console.log ( questionhash );
convertedhash = questionhash.toLowerCase().replace(/ /g, '-');
console.log ( convertedhash );
见输出:
答案 0 :(得分:2)
您需要使用each()
$('ul.responsive-accordion li').each( function() {
var id = $(this).attr('id');
console.log( id );
var newId = id.toLowerCase().replace(/ /g, '-');
console.log( newId );
$(this).attr('id', newId);
});
答案 1 :(得分:1)
您没有正确使用每项功能
$('ul.responsive-accordion').each(function() {
// use this to get access to the item in the loop
var question = $(this).find('li');
var questionhash = $(question).attr('id');
convertedhash = questionhash.toLowerCase().replace(/ /g, '-');
});
或者,您也可以这样做:
$('ul.responsive-accordion').each(function(idx, elem) {
var question = $(elem).find('li');
var questionhash = $(question).attr('id');
convertedhash = questionhash.toLowerCase().replace(/ /g, '-');
});
答案 2 :(得分:-2)
您想要在循环外初始化变量。
var question = $('ul.responsive-accordion').find('li');
$(question).each(function() {
var questionhash = $(question).attr('id');
convertedhash = questionhash.toLowerCase().replace(/ /g, '-');
});