En CSS, los selectores son patrones que se utilizan para seleccionar los elementos a los que se quiere dar estilo, los selectores también son útiles en javascript y a continuación hay algunos ejemplos de cómo usarlos.

Selectores básicos en JavaScript

— Utilice el método .querySelector

const div = document.querySelector('div'); 
// Primer elemento div en el documento

const p = div.querySelector('p'); 
// Primer elemento p dentro de un div 

— Para obtener todos los elementos coincidentes, utilice el método document.querySelectorAll

const div = document.querySelectorAll('div');
// NodeList de todos los elementos div

Selectores por IDs

Para obtener un elemento por su ID, utilice un # antes del ID del elemento.

// Primera Forma
document.querySelector('#id');

// Segunda Forma
document.getElementById('id');

Selectores por classes

Para obtener elementos por clase, use un . antes del nombre de la clase.

document.querySelectorAll('.myElementClass')

Selectores por nombre de etiqueta

Para obtener elementos por nombre de etiqueta, simplemente introduzca el nombre de la etiqueta.

document.querySelectorAll('body')

// Tambien de esta forma
document.getElementsByTagName('body')

Seleccionar todo los elementos

Para obtener todos los elementos use *

document.querySelectorAll('*') 

Seleccionar varios selectores

Para utilizar varios selectores, separamos cada uno de ellos con un ,.

<html>
    <body>
        <p>Hola, soy GodoFredo</p>
        <a href="http://facebook.com/godofredo.io">Mi Facebook</a>
        <a href="https://twitter.com/godofredoninja">mi Twitter</a>
    </body>
</html>
document.querySelectorAll('p, a') // => NodeList[p,a,a]

En los ejemplos anteriores, hicimos consultas básicas, pero se pueden hacer otras cosas como obtener elementos por orden o por padre.

Seleccionar al hijo de un elemento

Hay dos variantes de esto, una obtiene el hijo de un elemento sin importar cuán profundo esté en el árbol, y la otra obtiene el hijo directo de un elemento.

<html>
    <body>
        <p>Hola, soy GodoFredo</p>
        <div>
            <a href="http://facebook.com/godofredo.io">Mi Facebook</a>
            <p>
                Sigueme tambien en Twitter:
                <a href="https://twitter.com/godofredoninja">mi Twitter</a>
            </p>
        </div>
    </body>
</html>

Con el HTML de arriba como ejemplo, veremos estas dos variantes.

— Hijo directo

document.querySelector('div > a');
// <a href="http://facebook.com/godofredo.io">Mi Facebook</a>

— Seleccionar todo los hijos

document.querySelectorAll('div a');
// => NodeList[a,a]

Obtener elementos por orden

Hay dos maneras de hacer esto también. Considere el siguiente HTML.

<html>
    <body>        
        <div>
            <a href="http://facebook.com/godofredo.io">Mi Facebook</a>
            <pre>Sigueme tambien en Twitter:</pre>
            <p>Hola, yo no soy GodoFredo</p>
        </div>
        <p>Hola, soy GodoFredo</p>
    </body>
</html>

— Colocados después

document.querySelector('div + p')
// <p>Hola, soy GodoFredo</p>

— Con ~, seleccionas el elemento que sigue detrás.

document.querySelector('a ~ p') 
// <p>Hola, yo no soy GodoFredo</p>

Seleccionar un elemento por su atributo

Un selector de atributos comienza con [ y termina con ] y se utiliza de esta manera.

<html>
    <body>
        <p style="color:blue;">Hola soy un estilo</p>
        <p>Hola no tengo estilo</p>
    </body>
</html>
document.querySelector('p[style]') 
// <p style="color:blue;">Hola soy un estilo</p>

seleccionar un elemento verificando el valor de su atributo

Para comprobar un valor de atributo utilizamos el símbolo =.

<html>
    <body>
        <p>Hola, soy GodoFredo</p>
        <a href="http://godofredo.ninja">Mi Pagina</a>
        <a href="https://twitter.com/godofredoninja">mi Twitter</a>
    </body>
</html>
document.querySelector('a[href="https://godofredo.ninja"]')
// <a href="http://godofredo.ninja">Mi Pagina</a>

— Compruebe si el atributo comienza con....

document.querySelector('a[href^="https://godofredo"]')
// <a href="http://godofredo.ninja">Mi Pagina</a>

— Compruebe si el final atributo termina con...

document.querySelectorAll('a[href$=".com"]') 
// NodeList[a]

— Compruebe si el atributo contiene una subcadena

document.querySelectorAll('a[href*="fredo"]') 
// NodeList[a,a]

Selectores avanzados

:focus Selecciona el elemento que actualmente tiene el focus.

:visited Se utiliza con una etiqueta y selecciona los enlaces que han sido visitados.

:link También se utiliza con una etiqueta, pero en este caso, selecciona los enlaces que no han sido visitados.

:enabled Selecciona los elementos que están habilitados (no deshabilitados)

<html>
    <body>
        <p>Hola, soy GodoFredo</p>
        <p>¿Cómo estas?</p>
        <a href="http://facebook.com/godofredo.io">Mi Facebook</a>
        <a href="https://twitter.com/godofredoninja">mi Twitter</a>
        <button disabled="true"> Estoy deshabilitado </button>
    </body>
</html>
document.querySelectorAll(':enabled') // => NodeList[p,p,a,a]

:disabled Selecciona los elementos que han sido desactivados

document.querySelector(':disabled') 
// <button disabled="true"> Estoy deshabilitado </button>

:last-child Selecciona el elemento que es el último hijo de su padre

:first-child Selecciona el elemento que es el primer hijo de su padre

document.querySelector('p:first-child') // => <p>Hola, soy GodoFredo</p>

:first-of-type Selecciona el elemento que es el primer hijo de su padre y es del mismo tipo

document.querySelector('a:first-of-type')
// <a href="http://facebook.com/godofredo.io">Mi Facebook</a>

:last-of-type Selecciona el elemento que es el último hijo de su padre y es del mismo tipo

document.querySelector('p:last-of-type');
// <p>¿Cómo estas?</p>

:not Selecciona los elementos que no coinciden con el selector

document.body.querySelector(':not(a)')
// <p>Hola, soy GodoFredo</p>

:nth-child(n) Esto selecciona el elemento que es el n hijo de su padre.

<html>
    <body>
          <div class="div-uno">
            <p>Hola, soy GodoFredo</p>
            <a href="http://facebook.com/godofredo.io">Mi Facebook</a>
            <a href="https://twitter.com/godofredoninja">mi Twitter</a>
          </div>
          <div class="div-dos">Hola</div>
    </body>
</html>
document.querySelector('div:nth-child(2)')
// <div class="div-dos">Hola</div>

Mix and match

Estos selectores se pueden mezclar para realizar algunas comprobaciones complejas.

— Un botón desactivado de la clase 'btn'.

<html>
    <body>
        <div>
          <p>Hola, soy GodoFredo</p>
          <p>¿Cómo estas?</p>
          <a href="http://facebook.com/godofredo.io">Mi Facebook</a>
          <a href="https://twitter.com/godofredoninja">mi Twitter</a>
        </div>
        <button disabled="true"> Estoy deshabilitado </button>
        <button disabled="true" class="btn"> Estoy deshabilitado. mi clase es .btn</button>

    </body>
</html>
document.querySelector('button.btn:disabled')
// <button disabled="true" class="btn"> Estoy deshabilitado. mi clase es .btn</button>

Conclusión

Estas son sólo algunas de las formas en que puede utilizar los selectores en javascript y si desea saber más, aquí tiene un enlace a una referencia de selectores de CSS.