Как выбрать все теги привязки с определенным текстом

Учитывая несколько тегов привязки:

<a class="myclass" href="...">My Text</a>

Как выбрать якоря, соответствующие классу и с определенным текстом. Например, выберите все якоря с классом: 'myclass' и текстом: 'My Text'.


person Geoff Appleford    schedule 15.03.2010    source источник


Ответы (6)


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

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

var myAs = $("a.myclass:containsexactly('My Text')");
person Andy E    schedule 15.03.2010

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

$.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>

Немного улучшенная версия (со вторым параметром trim):

$.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>
person karim79    schedule 15.03.2010

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

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

        if ($store == 'My Text') {
            //do Anything.....
        }
    });
});
person Monika    schedule 07.11.2014
comment
Сначала выберите все теги, содержащие «МОЙ текст», затем для точного совпадения поместите его в условие if. тогда делай что хочешь. - person Monika; 07.11.2014
comment
добавьте это в свой ответ - person Dinistro; 07.11.2014

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

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

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

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

(просто оставив часть перед : пустой.)

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

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

person mmika1000    schedule 15.09.2016

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

$("a.myclass").html() == "your text"
person Muhammad Tanweer    schedule 31.01.2012
comment
Не работает. html() применяется только к первому элементу в наборе совпавших элементов (api.jquery.com/html ). Вам нужен поток управления или итерация, чтобы пройти через каждую из привязок, таких как each(). - person dyoo; 04.02.2015

person    schedule
comment
Спасибо, Дэвид. Как мне сделать сравнение с точным соответствием, а не содержит. Мне нужны только элементы, которые точно совпадают. - person Geoff Appleford; 15.03.2010
comment
Я бы только добавил различие между ссылками и закладками: ​$('a.myclass[href]:contains("My Text")')​​​​ - person Marko Dumic; 15.03.2010
comment
@geoff: нет встроенного способа получить точное совпадение. Вы можете либо использовать функцию .each для перебора их всех, либо написать свой собственный селектор jQuery. Эрик Мартин написал хороший вариант для точного соответствия. Вы можете найти его здесь: ericmmartin.com/creating-a-custom-jquery -селектор - person David Morton; 15.03.2010
comment
Как раз то, что мне было нужно. Спасибо. - person Geoff Appleford; 15.03.2010
comment
Что делать, если нет даже класса для идентификации? - person Amalgovinus; 30.07.2016
comment
@Amalgovinus Я предполагаю, что у вас тоже нет id для указания якоря? - person Blundering Philosopher; 10.11.2016
comment
@RadicalFanatic Right - person Amalgovinus; 11.11.2016
comment
чем вы за ответ, но что, если я хочу точное значение, а не все, что содержит значение? - person moath naji; 27.08.2017
comment
Содержит выберет все элементы, которые имеют четное подмножество текста. - person Lali; 21.05.2018