2011-06-16 51 views

回答

3

试试这个:

$("p").filter(function(){ 
    return $(this).text().length > 100; 
}).css("border", "2px solid black"); 
+2

大答案:如果你想不同的边界取决于文本的长度,也可以在设置两班一次。同样值得注意的是,如果向p标签中添加一个类并为类添加样式,而不是直接向每个p添加样式,则可能会发现问题的分离更易于管理。 – 2011-06-16 17:38:04

+0

@Jamie:是的,我还喜欢使用外部样式,而不是通过内联或通过JS应用...为便于维护 – Chandu 2011-06-16 17:39:05

+1

谢谢!完美工作 – re1man 2011-06-16 17:45:47

1

看一看this fiddle

它循环遍历所有p元素,并且如果内容的长度大于给定数量的字符,它会将该样式应用于该元素。

+0

这就是我要建议的,但是我真的很喜欢@ Cyber​​nate在这里的答案。 – 2011-06-16 17:37:04

+0

如何返回满足此条件的前4个“p”元素? – re1man 2011-06-16 18:05:47

3

我想你应该增加一个类,而不是包含新的内联样式。我将使用addClass的回调签名来实现此目的。

我打算使用Sizzle text函数(可作为$.text),因为它的性能明显好于$(this).text()

$('p').addClass(function() { 
    return $.text([this]).length > 100 ? 'long' : ''; 
}); 

然后,简单地定义一个p.long类与任何你想要的风格。

+0

我喜欢这种类型的增加 – 2011-06-16 17:49:17

+0

在我的测试(IE8),它没有工作:(不得不使用$(this).text()。逻辑测试的长度形式。 – 2011-06-16 18:16:30

+0

@Mark对不起,应该使用包含元素的数组 – lonesomeday 2011-06-16 18:58:54

0

很多方法可以做到这一点: 方式一:

$('p').filter(function() { 
    return $(this).text().length > 100; 
}).addClass('biggie'); 

和CSS:

.biggie 
{ 
    border: 2px solid black; 
} 

另一种方式:

$('p').filter(function() { 
    return $(this).text().length > 100; 
}).css({ 
    'border': '2px solid black' 
}); 

另一种方式:

$('p').each(function() { 
    if ($(this).text().length > 100) $(this).css({ 
     'border': '2px solid black' 
    }); 
}); 

另一个问题:

$('p').each(function() { 
    if ($(this).text().length > 100) $(this).addClass('biggie'); 
}); 

一个加法:

$('p').addClass(function() { 
    return $(this).text().length > 100 ? 'long' : 'short'; 
}); 
+0

如何返回满足此条件的前4个“p”元素? – re1man 2011-06-16 18:23:34

+0

@Praneet Sharma $('p')。slice(0,4).addClass('howdy '); – 2011-06-16 19:42:32

+0

因此最后一个是$('p')。slice(0,4).addClass(function(){ return $(this).text()。length> 100?'long': 'short'; });根据大小得到前4个段落的类 – 2011-06-16 19:50:44