2011-04-22 11 views
13

Necesito obtener el valor del atributo content de una determinada etiqueta meta.selector de valor de atributo insensible a las mayúsculas/minúsculas con Jquery

var someContent = $("meta[name=someKindOfId]").attr("content"); 

es la forma en que generalmente lo hago. Por razones comerciales, someKindOfId puede ser somekindofid. Podría ser otras combinaciones de casos también. No lo sé.

¿Cuál es la mejor manera de buscar esta metaetiqueta? Agregar una identificación u otro identificador está fuera de la cuestión.

+0

Ver este post, bastante buena solución: http://stackoverflow.com/questions/187537/is-there-a-case-insensitive-jquery-contains-selector – Eli

Respuesta

27

podría utilizar la función de filtro jQuery al igual que

var meta = $('meta[name]').filter(function() { 
    return this.name.toLowerCase() == 'somekindofid'; 
}); 

Sobre la base de CSS selector case insensitive for attributes

http://jsfiddle.net/nickywaites/mkBvC/

+1

Perfecto. var someContent = $ ('meta [nombre]'). filter (función() {return this.name.toLowerCase() == 'somekindofid';}). attr ("contenido"); –

+0

cómo puede ser la vida simple;) –

+0

Algo que noté con esa solución Josh es que solo devolverá el contenido para 1 etiqueta meta. No estoy seguro de si tendrías varias metaetiquetas con el mismo nombre, pero aquí tienes un violín actualizado: http://jsfiddle.net/nickywaites/mkBvC/1/ –

5

Además, para el caso insensible atributo * = Selector:

$("meta[name*=someKindOfId]") 

que puede utilizar:

$('meta').filter(function() { 
     return (/somekindofid/i).test($(this).attr('name')); 
}).attr("content") 
+0

Thisis como a * =, not =, pero es lo que estaba buscando –

0

¿Qué le parece esto?

Puede reutilizar la expresión jQuery insensible a mayúsculas y minúsculas, como se muestra en el siguiente fragmento (ejecútelo para ver cómo coincide el primer div, mientras que el segundo no).

$.expr[':'].iAttrContains = function(node, stackIndex, properties){ 
 
    var args = properties[3].split(',').map(function(arg) { 
 
     return arg.replace(/^\s*["']|["']\s*$/g, ''); 
 
    }); 
 
    if ($(node).attr(args[0])) { 
 
     //exact match: 
 
     return $(node).attr(args[0]).toLowerCase() == args[1].toLowerCase(); 
 
     //if you actually prefer a "contains" behavior: 
 
     //return -1 !== $(node).attr(args[0]).toLowerCase().indexOf(args[1].toLowerCase()); 
 
    } 
 
}; 
 

 
$("div:iAttrContains('data-name', 'test')").addClass('matched');
div{background:red;} 
 
div.matched{background:green;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<div data-name="This is a test">First div</div> 
 
<div data-name="This is a div">Second div</div>

Cuestiones relacionadas