Jquery如果element有以x开头的类,那么不要添加addClass
我是一个明确的新手,所以为垃圾编码道歉! 我为自己设定的练习项目编写了以下Jquery:
单击div时,会添加“in_answerbox1”类,并在answerbox中创建克隆的div,并添加“answerbox_letter1”类。
最终网格中会有很多div(或表格中的单元格),当您点击某个特定的网格时,它会淡出并似乎出现在答案框中。 然后,当您单击答案框中的内容时,网格中的相关div将重新出现,克隆将从答案框中删除。
但是,我现在只想添加类,如果我点击的东西不在答案框中:即,如果原始或克隆有一个包含“answerbox”的类。
我写了下面的内容,知道它不起作用,但它可以解释我想要的更好。
var n = 0; $('#box').click(function(){ if(!$(this).hasClass('*[class^="answerbox"]')) { $(this).addClass('in_answerbox' + (n+ 1) ); $(this).clone().appendTo('#answerbox').addClass('answerbox_letter' + (n + 1)); n = (n + 1); } });
有什么建议?
我认为问题是在if条件下:
if(!$(this).hasClass('[class^="answerbox"]')) {
试试这个 :
if(!$(this).is('[class*="answerbox"]')) { //Finds element with no answerbox class } else { //The element has already an answerbox class }
你应该看看toggleClass并且是 jquery docs。
看到这个实况小提琴的例子 。
小提示:而不是n = (n + 1)
你可以做n++
:)。
编辑 :
在再次阅读问题之后,我做了一个完整的工作脚本 :
假设Html是:
Answer1
Answer2
Answer3
jQuery :
var n = 0; $('#box p').on('click',function(e) { e.preventDefault(); if(!$(this).is('[class*="answerbox"]')) { n++; $(this).addClass('in_answerbox' + n ); $(this).clone().appendTo('#answerbox').addClass('answerbox_letter' + n); } });
在此处查看此示例 。
您应该考虑使用数据属性 ,它们比您尝试执行的操作更可靠。
请注意,如果您希望选择器仅在class属性以单词开头时匹配,则您需要[class^="word"]
。 *
但是搜索整个类属性。 但要小心, [class^="word"]
不匹配
请看这里 。
使用.hasClass()
而不是.hasClass()
。 前者可以与CSS选择器一起使用,而后者只能使用类名作为“固定”字符串。
if(!$(this).is('[class^="answerbox"]'))
注意:如果元素只有一个类,这将只能一致地工作
如果您需要适用于多个类名的内容,请选中此项
var theClasses = $(this).attr('class').split(" "); var i=0; var found = false; while(i