Отключение ссылок с помощью JQuery - PullRequest
5 голосов
/ 25 февраля 2009

У меня есть следующий код, который выполняет функцию, аналогичную тому, как ссылка комментария работает здесь в Stackoverflow ... при щелчке она вызывает ActionResult и заполняет div

   $(function() {
        $("a[id ^='doneLink-']").live('click', function(event) {
            match = this.id.match(/doneLink-(\d+)/);
            container = $("div#doneContainer-" + match[1])
            container.toggle();

            if (container.is(":visible")) {
                container.load($(this).attr("href"));
            } else {
                container.html("Loading...");
            }
            event.preventDefault();
        });
    });

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

Edit: Источник для этой функции выглядит следующим образом

<div id="dc_lifelistmenu"style="float:left;padding-bottom:5px;font-size:10pt;width:400px;">
    <a href="/entries/addentry/86">Add Entry</a> | 
    <a href="/goals/adddaimoku/86" id="daimokuLink-2">Log Daimoku</a> | 
    <a href="/goals/done/86" id="doneLink-2">Mark Completed</a> |
    <a href="/goals/remove/86">Remove</a>
</div><br />
<div id='daimokuContainer-2' style="display:none;">  Loading...</div>
<div id='doneContainer-2' style="display:none;">  Loading...</div>

Ответы [ 4 ]

9 голосов
/ 09 января 2010

Если вы хотите удалить ссылку вместо ее отключения:

jQuery('#path .to .your a').each(function(){
    var $t = jQuery(this);
    $t.after($t.text());
    $t.remove();
});

Примечания:

Вы также можете использовать функцию (k, v), чтобы получить итератор и элемент, не используя 'this' Не стесняйтесь заменить jQuery на $, если вы используете пространство имен по умолчанию var $ t = jQuery (это) - функция кэширования, которая ссылается на элемент, а также помогает очистить код хорошая практика - предшествовать переменным, которые на самом деле являются элементами jQuery, с помощью $, чтобы визуально разделить их в коде. Это также помогает вам распознать, что вы можете вызывать методы для них.
4 голосов
/ 25 февраля 2009

Чтобы изменить текст ссылки внутри вашей функции, просто используйте:

this.text('New Text!');

Чтобы отключить другой текст, нам нужно увидеть источник страницы. Я не уверен, что вы подразумеваете под "другими ссылками" ...

ОБНОВЛЕНИЕ: Исходя из ваших правок, я думаю, что вы хотите:

$(function() {
        $("a[id ^='doneLink-']").live('click', function(event) {
            match = this.id.match(/doneLink-(\d+)/);
            container = $("div#doneContainer-" + match[1])
            container.toggle();

            if (container.is(":visible")) {
                container.load($(this).attr("href"));
            } else {
                container.html("Loading...");
            }
            event.preventDefault();
            // added
            this.text('Hide');
            // disable others manually, repeat and adjust for each link
            $("#daimokuLink-" + match[1]).toggle();
            // or in one shot, all but the one I clicked
            $("#dc_lifelistmenu:not(#doneContainer-" + match[1] + ")").toggle(); 
        });
    });

ОБНОВЛЕНИЕ 2: увидел ваш комментарий. Чтобы отключить ссылку вместо ее скрытия, отключите onclick, переопределив ее, вместо использования toggle().

$("#daimokuLink-" + match[1]).click(function() { return false; });
3 голосов
/ 25 февраля 2009

Есть несколько способов приблизиться к этому, вероятно, самый простой - просто сделать что-то вроде: . $ ( 'А') фильтр ( ': не #doneLink') скрыть ();. скрыть все ссылки, которые не указаны выше.

Посетите эту страницу, чтобы узнать больше о селекторах jQuery:

http://docs.jquery.com/Selectors

1 голос
/ 02 июля 2011

Самый простой способ отключить привязку - это использование disabled-атрибута, но проблема в том, что данный атрибут поддерживается только IE. Это не будет работать в FireFox, например. Если вы хотите, чтобы ваш код работал в разных браузерах, вы можете попробовать сохранить значения атрибутов href и onclick в других пользовательских атрибутах, а затем установить href="#" и onclick="return false;". Включив обратно, вы должны восстановить сохраненные значения href и onclick. Для визуального эффекта вы можете использовать приложение specila css-class. Я описал этот подход в своем блоге - Отключить гиперссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...