2010-12-17 178 views
0

我想寫一個jquery函數,但我是全新的jquery。這是我很簡單的功能,這是我想要清除所有鏈接到非選擇類,除了選定的鏈接:JS新手需要幫助Jquery

$(function() 
{ 
    $('li a').click(function() 
    { 
     $('li a').addClass('unselected'); 
    $(this).addClass('selected'); 


    }); 


}); 

我該怎麼辦呢?那麼除了那些具有特定名稱屬性的人之外,我該如何取消選擇所有人?這裏是一個鏈接的例子:

<li><a id="106" name="wavelength" href="#">10.6 &micro;</a></li>... set of links 

和另一組的鏈接

<li><a id="10watt" name="power" href="#">10 watt</a></li>.... 

回答

1

在迴應您對其他答案之一的評論(現已刪除):

這些li標籤有五列。如何取消選中列中的列,而不選中其他列?我已標記的與我的名字鏈接屬性組他們

則可以將<li>鏈接由<ul>它們包含在組!

您可以使用jQuery搜索<a>的父母爲.closest('ul')然後.find('li a')內:

// best practice says you should cache the result of this search 
// so you don't need to find it again 
var $links = $('li a'); 
// attach a click function to the links 
$links.click(function() { 
    // again cache it... we will use it more than once. 
    var $this = $(this); 

    // remove selected from everything - add unselected 
    $this.closest('ul').find('li a').removeClass('selected').addClass('unselected'); 
    // remove unselected from this link and add selected 
    $this.removeClass('unselected').addClass('selected'); 
}); 

既然你說的鏈路組共享name屬性看看這個代碼:

var $links = $('li a'); 
$links.click(function() { 
    // store ourself as a jquery object, and get our name: 
    var $this = $(this), myname = $this.attr('name'); 

    // filter $links to obtain the ones that share myname: 
    $links.filter(function() { 
    // we can use the DOM element "this.name" instead of $(this).attr('name') 
    // to save some time here: 
    return this.name == myname; 
    }).removeClass('selected').addClass('unselected'); 

    $this.removeClass('unselected').addClass('selected'); 
}); 

只要找到一個具有特定名稱屬性檢查出Attribute Equals Selector看起來像這樣:

$('li a[name=wavelength]'); 
+0

謝謝。這對我來說是一個全新的領域,所以我不知道我在做什麼。我討厭別人爲我寫代碼,但直到我看到代碼我無法學習,對吧?不管怎樣,謝謝。 – sehummel 2010-12-17 20:08:03

+0

我將你標記爲已接受。 – sehummel 2010-12-17 21:15:04

1
$(function() { 
    var $a = $('li a'); 
    $a.click(function() { 
    $a.removeClass('selected').not(this).addClass('unselected'); 
    $(this).addClass('selected'); 
    }); 
});

如果你想針對具有特定名稱的鏈接,可能的選擇之一是
a[name='somenamehere']

在這個例子中,這就夠了:
$a.filter("[name='somenamehere']")
(您可能需要不同的方式實現的屬性選擇,這取決於你想要做什麼)


此外,它可能是一個很好的如果你放棄了「未被選中」的課程,那麼這個想法就是了。我假設你正在使用它來造型。如果是這樣,給所有的鏈接樣式,然後給.selected環節上其原有的風格造型頂:


.menu a, .menu a:visited { 
    color: #FF0000; 
    text-decoration: none; 
} 

.menu a.selected { 
    font-weight: bold; 
}
+0

+1快手指 – gnarf 2010-12-17 19:50:19

0

你幾乎沒有... :)試試這個:

$(function() 
{ 
    $('li a').click(function() 
    { 
     $("li a[name!='wavelength']").addClass('unselected'); 
       $(this).removeClass('unselected'); 
       $(this).addClass('selected'); 
    }); 
}); 
+0

謝謝,Cyber​​mate。我如何概括這個,所以我可以逐欄選擇每一列中的一個項目? – sehummel 2010-12-17 19:54:27

+0

嗨舒梅爾,我不明白什麼是逐列的意思。你能否詳細說明一下? – Chandu 2010-12-17 20:04:30

+0

水平有五列。用戶從列1然後列2中選擇一個項目,依此類推。但是gnarf的回答讓我想到了我想要的地方。感謝您如此樂意提供幫助。 – sehummel 2010-12-17 20:58:29