Javascript 无法检索任何父元素的类名失败或返回未定义

Javascript 无法检索任何父元素的类名失败或返回未定义,javascript,jquery,Javascript,Jquery,无法检索任何父元素的类名失败或返回未定义的: $(函数(){ $(文档)。在('单击','.addfile',函数()上{ //需要和家人相处 var Target=$(this.parents('div').find('[class^=“file plugin-”]); Target=Target.attr('class'); 控制台日志(目标); var Target=$(this).closest('div').find('[class^=“file plugin-”]); Target

无法检索任何父元素的类名失败或返回未定义的:

$(函数(){
$(文档)。在('单击','.addfile',函数()上{
//需要和家人相处
var Target=$(this.parents('div').find('[class^=“file plugin-”]);
Target=Target.attr('class');
控制台日志(目标);
var Target=$(this).closest('div').find('[class^=“file plugin-”]);
Target=Target.attr('class');
控制台日志(目标);
var Target=$(this.parentsUntil('[class^=“file plugin-”]);
Target=Target.attr('class');
控制台日志(目标);
});
});

去除
添加
您正在使用class^=”

如果查看文档,您将看到该属性是否以选择器
[name^=“value”]

这意味着该属性需要

class="value-abc"
因此,它与您的大小写不匹配,因为字符串不在最开头。您需要使用Attribute Contains Selector
[name*=“value”]

另一个问题是最近的将抓住包装div,而您正在寻找的div仍然是该div的祖父母

$(函数(){
$(文档)。在('单击','.addfile',函数()上{
var elm=$(this).closest(“[class*=”文件插件-“]”);
console.log(elm.attr(“class”);
console.log(elm.attr(“class”).match(/file plugin-\d+/)[0])
//我会怎么做
var elem=$(this).closest(“[数据索引]”);
console.log(元素数据(“索引”))
});
});

去除
添加

问题是,您要查找的div类实际上并不是以
“file plugin-”
开始的,它只是包含了它。您需要手动检查class属性,JQuery在这方面没有太大帮助(据我所知)

像这样的方法应该会奏效:

$(函数(){
$(文档)。在('单击','.addfile',函数()上{
//需要和家人相处
var target=$(this.parents(“div”).filter(((uu,div)=>-1!=div.className.indexOf('file-plugin-'));
//console.log(目标[0]);
//或者使用“包含”选择器(归功于@epascarello)
target=$(this).parents(“div[class*=file plugin-]”;
var string=target.attr(“class”).split(“”).filter(clazz=>clazz.startsWith('file-plugin-'))[0];
console.log(字符串);
});
});

去除
添加

您可以使用正则表达式查找以特定文本开头的元素类

$(document).on('click','.addfile', function() {
   var Target = $(this).parents().filter((i, ele)=>ele.className.match(/\bfile-plugin-/)).attr('class')
    console.log(Target);
    });

你想在三个
控制台中获取
file-plugin-1
吗?log
?@david我添加了三个我已经测试过的示例。但是我需要获取附近的元素:
file-plugin-
可以有其他类似类的元素:“file-plugin-1”、“file-plugin-2”“@walternuñez这就是
*=
将要做的。如果您在元素上使用了一个公共类,那么您可以只引用类名,这样效率会更高。好的,但我只需要将该元素的类名设置为string=“file-plugin-1”,但是如果该元素有其他类名:file-plugin-2,我需要获得这个新名称。不完全是元素这就是为什么你应该使用数据属性,这会让你的生活更轻松。我不能依赖数据属性,比如说,设计师和审查html代码的人不支持我在插件OK的这一部分添加数据属性,但我只需要将类名设置为string=“file-plugin-1”对于这个元素,但是如果元素有其他类名:file-plugin-2,我需要得到这个新的。并不是所有的元素都做出了这样的改变