2012-06-13 39 views
8

en bazıseçme elemanı

<TR style = "background-color : red ;"> 

ve bazı

<TR> 

olduğunu varsayalım (bu alanlarda kolon yanında ve daha dikkatli olunması için

: Ben uğraşıyorum sayfa

şimdi) bu şekilde yazıldığı için noktalı virgül, bu kasıtlı

mükemmel çalışır. Ama here diyor: [! Name = "değer"]

yerli DOM querySelectorAll() metodu ile sağlanan performans artışı yararlanmak mümkün değil. . Modern tarayıcılarda iyi performans için, ("your-saf-css-seçici") yerine değil ('[name = "değer"]')

yüzden

merak ediyorum $ kullanın: ifadem en iyisi bunlardan biri ya da benzerleri:

$('.detailtable tr').not('[style~="darkgray"]') // this doesn't work! 

daha iyi performans gösteriyor? Ve bu son ifadeyi yazmanın doğru yolu nedir? İlginçtir ki

+0

'$ ('. Detailtable tr'). Değil ('[style ~ =" darkgray "]')' aynı şekilde çalışmalıdır. Performans hakkında endişeli iseniz, test edin: http://jsperf.com/. –

+0

yorum yazdığım gibi, $ ('. Detailtable tr'). ('[Style ~ = "darkgray"]') çalışmıyor ... – Pierpaolo

cevap

20

, bunu böyle *= yerine ~=, kullanmalıdır:

$('.detailtable tr').not('[style*="darkgray"]'); 

İşte fiddle bu.


Ve hayır, .not kullanarak muhtemelen daha hızlı değildir.querySelectorAll, bu seçiciyi olduğu gibi ayrıştırabilmelidir.

Bkz. Bu fiddle.


Düzenleme: IE8'de önem veriyorsanız o zaman size küçük bir performans destek verecek yerine :not seçicinin .not yöntemi kullanılarak, çok. Bunun nedeni çok basit: IE8 öznitelik seçicilerini destekliyor, ancak negatif seçiciyi desteklemiyor.

+0

Evet, 'querySelectorAll() 'ile çalışacak çünkü geçerli bir CSS seçicisi. Ayrıca bakınız: [jQuery ile CSS arasında değil:() selektöründeki fark nedir?] (Http://stackoverflow.com/questions/10711730/whats-the-difference-in-the-not-selector-between- jquery-and-css) (İnsanların performans konusunda nasıl durması gerektiği konusunda küçük bir bölüm yazacağım, ama insanların dışarıda okumayı çok önemsediklerini düşündüm. Bunu yazınız ...) – BoltClock

+0

@BoltClock - tabi ki, '' not' seçicisi ve jQuery '' be' değil '' arasındaki farklar vardır. Bununla birlikte, bu durumda, yerel uygulamanın yalnızca iyi bir şekilde ele alınacağını varsaymak güvenlidir. –

+0

@BoltClock - Performans hakkında çok fazla şey umuyorum, ancak fikrinizi memnuniyetle duyardım. Paylaşmak ister misiniz? Küçük roman kitabı olsa bile onu okuyabiliyordum ... –

0

I'd suggest you take a look at this.

önceden

sayesinde sözde seçiciler (gibi ": değil") aslında ilk seçici yanındaki bir fonksiyonu kullanılarak daha yavaş olma eğilimindedir. Aslında ... görünüşe göre "iki katı yavaş".

Ben alıntı:

  1. $("#id p");
  2. $("#id").find("p");

Eğer İkinci yol iki kat daha hızlı ilk olarak daha fazla olabilir sizce sürpriz misiniz? 'un hangi seçmenlerden daha iyi performans gösterdiğini (ve neden), kodunuzun iyi çalıştığından emin olmak için anahtar bloğu olan güzel bir anahtardır ve kullanıcılarınızın bir şeyler olmasını beklemeyin.

Arkadaşım .not ile giderdim arkadaşım! Eğer gerçekten "bir özelliğe içinde bir dize içermediğini elemanı seçmek" isterseniz

+0

Görünüşe göre? Bana değil. – BoltClock

+0

http://jsperf.com/id-vs-class-vs-tag-selectors/2 adresine göre sözde seçmenler tüm seçmenlerin en yavaşıdır. Daha sonra jQuery işlevini zincirlemekten daha hızlı olduklarını gösteren hiçbir kanıt bulamadım. Öyleyse, tekrar etmediğim için, söz konusu kanıt mevcut olmadığı anlamına gelmez. :) – cereallarceny

0

W3C Recommendation'dan şu anda kullandığınız, document.querySelectorAll() ile bile kusursuz şekilde çalışmalıdır.

Belki beklendiği gibi çalışıp çalışmadığını test edebilirsiniz.

+0

': not()' uzun yıllar önce taslak eklendi, ve jQuery yakında onu aldı ... – BoltClock

+0

@BoltClock Ama [selektörler tablosu] (http://www.w3.org/TR/css3-selectors/#selectors), Negation Pseudo Class için "İlk CSS düzeyinde tanımlanmış" sütununda "3" ifadesini kullanır. Bu yüzden bunun, seçmenler listesine yeni eklenen olduğunu düşündüm. Lütfen jQuery tarafından daha önce alındığını onaylamak için herhangi bir referans verin. Düzenlemeden önce yanıtınızı bekleyeceğim. – Sujay

+0

CSS3 yalnızca son zamanlarda bir öneride bulunuldu, ancak 10 yıldan fazla bir süredir taslakta ve ': not()' sadece bir süredir etrafta dolaşıyordu (spec sayfasına gidip "Önceki sürüm" e tıklamaya devam ediyor). jQuery, ilk büyük kararlı sürümü olan ': not()' ile birlikte gönderilir - [docs] 'da "sürüm eklendi: 1.0" yazıyor (http://api.jquery.com/not-selector). – BoltClock