2011-10-03 7 views
9

Estoy tratando de usar modernizr para probar el soporte del navegador :nth-child, pero no estoy seguro de cómo hacerlo, encontré este http://jsfiddle.net/laustdeleuran/3rEVe/ que prueba :last-child pero no sé cómo cambiarlo para detectar :nth-child (I También estaba pensando en usarlo así porque creo que los navegadores que no admiten :last-child tampoco son compatibles con :nth-child, pero no estoy seguro)¿Cómo probar el enésimo hijo con Modernizr?

¿Pueden ayudarme? ¡Gracias por adelantado!

+2

para ser honesto, es muy razonable suponer que un navegador sea compatible con ': nth-child()' y ': último child', o si no admite tampoco. – BoltClock

+0

Pruebe este complemento ... http://selectivizr.com/
inserte debajo/después del archivo css solamente! –

Respuesta

13

acabo de escribieron una función para detectar el: apoyo nth-child para usted

function isNthChildSupported(){ 
var result = false, 
    test = document.createElement('ul'), 
    style = document.createElement('style'); 
test.setAttribute('id', 'nth-child-test'); 
style.setAttribute('type', 'text/css'); 
style.setAttribute('rel', 'stylesheet'); 
style.setAttribute('id', 'nth-child-test-style'); 
style.innerHTML = "#nth-child-test li:nth-child(even){height:10px;}"; 
for(var i=0; i<3; i++){ 
    test.appendChild(document.createElement('li')); 
} 
document.body.appendChild(test); 
document.head.appendChild(style); 
    if(document.getElementById('nth-child-test').getElementsByTagName('li')[1].offsetHeight == 10) {result = true;} 
document.body.removeChild(document.getElementById('nth-child-test')); 
document.head.removeChild(document.getElementById('nth-child-test-style')); 
    return result; 
} 

Uso:

isNthChildSupported() ? console.log('yes nth child is supported') : console.log('no nth child is NOT supported'); 

se puede ver que esto funciona en acción aquí http://jsbin.com/epuxus/15

también Hay una diferencia entre jQuery :nth-child y CSS :nth-child.

jQuery :nth-childse soportado en cualquier navegador compatible con jQuery, pero CSS :nth-childis supported en IE9, Chrome, Safari y Firefox

+3

Gracias por su respuesta, funciona, pero después de mirar un poco más encontré este https://gist.github.com/441842 que realmente prueba todos los selectores, con suerte alguien lo encontrará útil también. – javiervd

+1

Sé que esto es anterior, pero ¿alguien más recibe un error en IE8 al usar esta función? Ver http://stackoverflow.com/questions/6631871/modifying-the-innerhtml-of-a-style-element-in-ie8 – doubleswirve

3

Recuerdo que había un plugin de selectores Modernizr que puso a prueba el apoyo selectores, pero no puedo encuéntralo ahora mismo. Puede echar un vistazo a esto: http://javascript.nwbox.com/CSSSupport/ que es similar.

2

También se puede utilizar para añadir soporte Selectivizr selector CSS3 para navegadores no compatibles

+0

Esto funciona muy bien. – hellojebus

1

Mohsen, gracias por su decisión. Si alguien necesita jQuery:

function test(){ 

    var result = false, 
     test = $('<ul id="nth-child-test"><li/><li/><li/></ul>').appendTo($('body')), 
     style = $('<style type="text/css">#nth-child-test li:nth-child(even){height:10px;}</style>').appendTo($('head')); 

    if(test.children('li').eq(1).height() == 10) 
    result = true; 

    test.remove(); 
    style.remove(); 

    return result; 

}; 
+0

funciona como un encanto – Alex

Cuestiones relacionadas