2010-03-15 3 views

ответ

104
$("a.myclass:contains('My Text')") 
+0

Спасибо, Дэвид. Как сделать точное сопоставление совпадений, а не содержать. Мне нужны только те элементы, которые точно соответствуют. –

+0

Я бы добавил только различие между ссылками и закладками: '$ ('a.myclass [href]: содержит (« Мой текст »)')' –

+1

@geoff: нет встроенного способа получить точное совпадение. Вы можете либо использовать функцию .each, чтобы перебирать все их, либо написать собственный селектор jQuery. Эрик Мартин написал хороший для точного матча. Вы можете найти его здесь: http://www.ericmmartin.com/creating-a-custom-jquery-selector/ –

4

Если вы только беспокоили, если текст анкера содержит конкретную строку, перейдите с раствором @ Dave Мортона. Однако, если вы хотите точно соответствовать конкретной строке, я хотел бы предложить что-то вроде этого:

$.fn.textEquals = function(txt) { 
    return $(this).text() == txt; 
} 

$(document).ready(function() { 
    console.log($("a").textEquals("Hello")); 
    console.log($("a").textEquals("Hefllo")) 
}); 

<a href="blah">Hello</a> 

слегка улучшенной версии (со вторым подрезать параметр):

$.fn.textEquals = function(txt,trim) { 
    var text = (trim) ? $.trim($(this).text()) : $(this).text(); 
    return text == txt; 
} 

$(document).ready(function() { 
    console.log($("a.myclass").textEquals("Hello")); // true 
    console.log($("a.anotherClass").textEquals("Foo", true)); // true 
    console.log($("a.anotherClass").textEquals("Foo")); // false 
}); 

<a class="myclass" href="blah">Hello</a> 
<a class="anotherClass" href="blah"> Foo</a> 
12

Вы может создать пользовательский селектор, аналогичный :contains для точных совпадений:

$.expr[':'].containsexactly = function(obj, index, meta, stack) 
{ 
    return $(obj).text() === meta[3]; 
}; 

var myAs = $("a.myclass:containsexactly('My Text')"); 
-2

Я думаю, что это должно работать для точного соответствия вещи ..

$("a.myclass").html() == "your text" 
+0

Не работает.'html()' применяется только к первому элементу в наборе согласованных элементов (http://api.jquery.com/html/). Вам нужно управлять потоком или итерацией, чтобы пройти через каждый из якорей, например 'each()'. – dyoo

3

Сначала выберите все тэги, содержащие «Мой текст». Затем для каждого точного соответствия, если оно соответствует условию, делайте то, что вы хотите сделать.

$(document).ready(function() { 
    $("a:contains('My Text')").each(function() { 
     $store = $(this).text(); 

     if ($store == 'My Text') { 
      //do Anything..... 
     } 
    }); 
}); 
+0

Хороший ответ требует некоторого объяснения. – Dinistro

+0

Сначала выберите все теги, которые содержат «MY text», а затем для точного совпадения вставьте это условие if. затем сделайте то, что вы хотите сделать. – Monika

+0

Добавьте это к вашему ответу – Dinistro

0

Если вы не знаете класс нужного объекта и просто хочу, чтобы пойти после того, как текст ссылки, то можно использовать

$(".myClass:contains('My Text')") 

Если вы даже не знаете, какой элемент его есть (например, р, ссылка, ...), вы можете использовать

$(":contains('My Text')") 

(оставив только часть, прежде чем : пустой.)

Я должен добавить здесь, что он отображает все элементы, начиная с <html> -Переход к нужному элементу. Решение, которое я мог бы предоставить, добавляет к нему .last(), но этот работает только в том случае, если найдется только один элемент. Может быть, сбды. Здесь лучшее решение.

Собственно, это должно быть дополнение к принятому ответу, особенно к вопросу @Amalgovinus.

Смежные вопросы