JavaScript/jQuery-脚本不工作-添加&;删除类,合并数组-测试用例
我有这个剧本: JSJavaScript/jQuery-脚本不工作-添加&;删除类,合并数组-测试用例,javascript,jquery,arrays,class,merge,Javascript,Jquery,Arrays,Class,Merge,我有这个剧本: JS // A & B is needed var needed = ["#n01", "#n03"]; // always holds what the user has clicked var user = []; // needed + user var mixed = []; // takes care of highlighting clicked letters & // updating the user array function
// A & B is needed
var needed = ["#n01", "#n03"];
// always holds what the user has clicked
var user = [];
// needed + user
var mixed = [];
// takes care of highlighting clicked letters &
// updating the user array
function hilit ( elem, cssClass ) {
$( elem ).click( function () {
if( $( this ).hasClass( cssClass )){
//remove from array "highlighted"
user.splice( $.inArray( "#" + $( this ).attr( "id" ), user ), 1 );
$( this ).removeClass( cssClass );
} else {
// add to array array "highlighted"
user.push( "#" + $( this ).attr( "id" ) );
$( this ).addClass( cssClass );
}
});
}
// is something wrong here? it works locally...
$("#lorem").on("click", function() {
// merging -> needed + user
mixed = $.merge(needed, user);
// removing duplicates
var map = new Object();
for ( var i = 0; i < mixed.length; i++ ) {
if (map[mixed[i]] === undefined ){
map[mixed[i]] = 1;
}
else{
map[mixed[i]]++;
}
}
// result = letters the user didn't click
var result = new Array();
for( var i = 0; i < mixed.length; i++ ){
if( map[mixed[i]] > 1 ){
//do nothing
}
else{
result.push(mixed[i]);
}
}
)};
hilit (".letter", "color");
body {
font-size: 160px;
font-weight: bold;
}
.letter {
cursor: pointer;
}
.color {
background: red;
}
说明
段落#lorem
中的每个字母都用span
包装。字母
。单击.letter
时,将检查类.color
是否存在。如果是,则删除.color
,并从数组用户中删除相应的ID
。否则将添加颜色
,并将id推入用户
有三种数组:needed
、user
和mixed
。
needed
保存用户需要单击的ID<代码>用户保存用户单击的ID<代码>混合是用户,需要合并
每次单击,所需的
和用户
都会合并到混合
。结果是mixed
两次保存某些ID。然后过滤掉这些重复项,留下用户本应单击但未在数组中单击的元素IDresult
问题
好吧,一开始:我直接从我的编辑器中获取代码,但不知怎么的,它无法正常工作。我在脚本中断的地方添加了一条注释。这是JSFIDLE的怪癖还是我把事情搞砸了
单击带有.color
的元素后,ID应仅在mixed
中显示一次。相反,它现在出现了三次。因此,不再在hilit中删除它,而是再次添加它。
为什么会这样&我怎样才能解决这个问题?这与我在()上使用有关吗
非常需要并感谢任何帮助 这似乎现在起作用了:
$(“#lorem”)。在(“单击”,函数(){
//合并->需要+用户
混合=$.merge(需要,用户);
//删除重复项
var map=新对象();
对于(变量i=0;i1){
//无所事事
}
否则{
结果:推送(混合[i]);
}
}
});
编辑:
查看功能的文档:
如果需要原始的第一个数组,请在调用之前复制它
$.merge()
这似乎现在起作用了:
$(“#lorem”)。在(“单击”,函数(){
//合并->需要+用户
混合=$.merge(需要,用户);
//删除重复项
var map=新对象();
对于(变量i=0;i1){
//无所事事
}
否则{
结果:推送(混合[i]);
}
}
});
编辑:
查看功能的文档:
如果需要原始的第一个数组,请在调用之前复制它
$.merge()
代码提示:{}
和[]
分别优于新对象()
和新数组()
。代码提示:{}
和[]
分别优于新对象()
和新数组()
。谢谢,请问有什么问题吗?我看你实际上没有改变密码。你的意思是小提琴现在能用了,对吧?哦,天哪,那真是令人尴尬哈哈;-)虽然这并不能解决上述主要问题,但它发生在我们所有人身上…:-)谢谢,请问怎么了?我看你实际上没有改变密码。你的意思是小提琴现在能用了,对吧?哦,天哪,那真是令人尴尬哈哈;-)虽然这并不能解决上述主要问题,但它发生在我们所有人身上…:-)
body {
font-size: 160px;
font-weight: bold;
}
.letter {
cursor: pointer;
}
.color {
background: red;
}
$("#lorem").on("click", function() {
// merging -> needed + user
mixed = $.merge(needed, user);
// removing duplicates
var map = new Object();
for ( var i = 0; i < mixed.length; i++ ) {
if (map[mixed[i]] === undefined ){
map[mixed[i]] = 1;
}
else{
map[mixed[i]]++;
}
}
// result = letters the user didn't click
var result = new Array();
for( var i = 0; i < mixed.length; i++ ){
if( map[mixed[i]] > 1 ){
//do nothing
}
else{
result.push(mixed[i]);
}
}
});