Скрыть ссылку с определенным классом и атрибутом - PullRequest
1 голос
/ 05 марта 2009

У меня есть этот HTML.

<a class="link" href="www.website.com?id=233253">test1</a>
<a class="link" href="www.website.com?id=456456">test2</a>

Как я могу скрыть одну из этих ссылок, используя атрибут href и только последние цифры (233253), чтобы скрыть ссылку с этим атрибутом href и классом "link"?

Это не рабочий код, просто то, что я собрал, чтобы объяснить это лучше. getElementsByTagName ( 'а'). Класс ( 'ссылка'). HREF = "* 233253"

Обновление: К сожалению, это должен быть чистый JavaScript, не использующий библиотеку, и он должен работать в IE6.

Update2: У меня нет доступа к html

Ответы [ 5 ]

4 голосов
/ 05 марта 2009

Использование jQuery:

$("a.link[href$='233253']").hide();

Селектор атрибута $ = соответствует всем элементам, у которых выбранный атрибут заканчивается заданным значением.

4 голосов
/ 05 марта 2009

[ edit ]: код был несколько небрежным, теперь должен работать. Включая метод разделения (см. Комментарии).

Переберите элементы a, проверьте href и примените сокрытие. Как это:

var refs = document.getElementsByTagName('a');
for (var i=0;i<refs.length;i++) {
       if (
             refs[i].href &&
             refs[i].href.replace(/(\d+$)/,'$1').match('[your value to match]')
          ) {
           refs[i].className = refs[i].className.replace(/link/i,'');
           refs[i].style.display = 'none';
       }
}

ИЛИ

for (var i=0;i<refs.length;i++) {
   var hs = refs[i].href.split(/=/)[1];
   if (  hs.match([your value to match]) ) {
       refs[i].className = refs[i].className.replace(/link/i,'');
       refs[i].style.display = 'none';
   }
}
3 голосов
/ 05 марта 2009
<html>
<head>
<script type="text/javascript">

function hideLinks(className, ids) {
    var links = document.getElementsByTagName("a");
    var max   = links.length;

    for (var i=0; i<max; i++) {
        var link   = new RegExp("(\s*)"+ className +"(\s*)");
        var isLink = link.test(links[i].className);

        if (isLink) {
            for (var j=0; j<ids.length; j++) {
                var regexp = new RegExp(ids[j] + "$");
                var hasId  = regexp.test(links[i].href);

                if (hasId) {
                    links[i].style.display = "none";
                }
            }
        }
    }
}

window.onload = function() {
    hideLinks("link", [233253]);
}
</script>
</head>
<body>

<a class="link" href="www.website.com?id=233253">test1</a>
<a class="link" href="www.website.com?id=456456">test2</a>


</body>
</html>

Редактировать : я опубликовал новую версию после прочтения вашего комментария об инкапсуляции функциональности внутри функции. Этот должен работать так же, как и предыдущая версия.

1 голос
/ 06 марта 2009

Без обид, но создание петель кажется мне обходным путем. Если бы вы могли добавить уникальные идентификаторы в ссылки, это, очевидно, будет предпочтительным методом.

После этого вы можете использовать 'getElementById', чтобы установить другой класс для скрытия конкретной ссылки.

0 голосов
/ 06 марта 2009

Что отличает одну ссылку от другой? Если вы знаете, что на стороне сервера, то добавьте соответствующие имена классов, которые будут статически скрыты от CSS.

Динамическое определение того, что необходимо скрыть, потребует от вас динамической генерации фрагмента JavaScript, если вы не отрендерите это внутри HTML.

Обновление: Если у вас нет доступа к сгенерированному HTML, мой пост вам не поможет.

...