2011-06-16 53 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