Estoy tratando con algunos generado abarca y me gustaría saber que uno de ellos no contienen ningún texto.

El margen de ganancia es:

<span id="layer6">
    <span class="drag col">  Some text</span>
    <span class="drag col">  More text</span>
    <span class="drag col">  </span>
    <span class="drag col">  I also have text</span>
</span>

Puedo conseguir los que tienen «un texto» con este código, pero no puedo bajar los vacíos:

if ($('#layer6 > span.col:contains("some text")').length > 0) {
    alert ("I have text");
}

Cómo obtener los vacíos? Estoy pensando en el uso .la longitud de hacerlo pero no pude.

InformationsquelleAutor Mircea | 2010-03-04

4 Comentarios

  1. 49
    $("span.col").each(function(){
        if (!$(this).text().trim().length) {
            $(this).addClass("foo");
        }
    });

    http://jsfiddle.net/cfgr9/1/

    Obviamente, en lugar de agregar una clase puede hacer lo que te gusta, devolver el objeto, etc

    ACTUALIZACIÓN: se ha Eliminado extraño personaje oculto tras la final punto y coma que causó error de js.

    • Gracias Alex, esto funciona. Hay un carácter ilícito después de su última });&#8203; pero me había quitado y que funciona bien. Thanx
    • Esta es una buena solución que funciona, por ejemplo, para <p> etiquetas a menudo vacío generado por la CMS.
    • Yo estaba jugando con el $(«span:vacío») selector con ningún éxito. Esta solución funcionó para mí. +1
  2. 9

    Uso filter para filtrar los elementos que no tienen contenido textual:

    $('#layer6 > span.col').filter(function(){
        return $(this).text().trim() != "";
    }).length
    • Este trabajo, por favor, déjame probar y voy a publicar los resultados. Thanx
  3. 5

    yo no soy consciente de que tal selector, pero es fácil escribir

    jQuery.expr[‘:’].vacío = function(obj) {
    volver jQuery(obj).texto().replace(/^\s+|\s+$/, «»).longitud == 0;
    }

    jQuery.expr[':'].hasNoText = function(obj) {
        return jQuery.trim(jQuery(obj).text()).length == 0;
    }

    y luego, por ejemplo

    $("#layer6 span:hasNoText").text("NEW TEXT")

    sólo para los empleados beneficio, aquí está la versión extendida. $(«nodo: (partidos/regexp/)») selecciona los nodos cuyo contenido de texto coincide con dado regexp.

        <script>
        ///:matches(regexp)    
        ///regexp is like js regexp except that you should double all slashes
        jQuery.expr[':'].matches = function(obj, index, args) {
            var m = (args[3] + "").match(/^\/(.+?)\/(\w*)$/);
            var re = new RegExp(m[1], m[2]);
            return jQuery(obj).text().search(re) >= 0;
        }
        </script>

    demo:

        <script>
        $(function() {
            $("div").click(function() {
                $("div:matches(/foobar/)").text("foobar was here")
                $("div:matches(/foo\s+bar/i)").text("some text")
                $("div:matches(/^\s+$/)").text("only spaces")
            });
        });
        </script>
    
        html before 
    
        <div>foobar</div>
        <div>Foo Bar</div>
        <div>       </div>
    
        html after 
    
        <div>foobar was here</div>
        <div>some text</div>
        <div>only spaces</div>
    • :vacío existe: api.jquery.com/empty-selector
    • gracias por la sugerencia, voy a probar esto y hacerle saber
    • :vacío obtiene el elemento con absolutamente ningún texto, el contenido. En mi caso tengo 2 espacios vacíos entre los abarca: <span class=»arrastrar col»> </span>

Dejar respuesta

Please enter your comment!
Please enter your name here