实现jquery自定义过滤器的简洁方法(基于父类的选择)?

mon*_*ist 4 jquery

我要选择每一个textarea的具有一流的DIV 红色的家长们,做一些每个,然后做别的事情与文本域的页面上的其余部分.换句话说,选择一组元素,仅处理其中一些元素,然后对其余元素执行其他操作.

我知道我可以做类似下面的事情,但有没有一种不那么笨拙的方式呢?

$('textarea').filter(function() {
    return $(this).parents("div.red").length > 0;
}).css('border','1px solid red').end().filter(function() {
    return $(this).parents("div.red").length == 0;
}).css('border','1px solid green');
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mat*_*att 5

这种方式有什么问题?jQuery功能强大,但是要保持代码清洁和可读性并且不要太聪明.

$('textarea').each(function() {
  if ($(this).parent('div.red').length > 0) {
    $(this).css('border', 'solid 1px red');
  } else {
    $(this).css('border', 'solid 1px green');
  }
}
Run Code Online (Sandbox Code Playgroud)


cob*_*bal 5

也许不是最有效的,但相当直观的是

$('textarea').css('border', '1px solid green');
$('div.red textarea').css('border', '1px solid red');
Run Code Online (Sandbox Code Playgroud)

虽然如果你想在任何时候都把它应用到每个文本区域,这样的东西可能更多地属于css:

textarea {
    border: 1px solid green;
}

div.red textarea {
    border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

正如Paolo Bergantino所提到的,如果你想在textareas上做一些比css命令更复杂的事情你可以使用

var redAreas = $('div.red textarea');
var otherAreas = $('textarea').not(redAreas);
Run Code Online (Sandbox Code Playgroud)