如何在javascript中选择相对于'this'的元素

时间:2013-08-12 16:52:19

标签: javascript jquery

我有以下内容:

<div class="tab-pane" id="message">
      <textarea rows="4" cols="50" id="send_message" placeholder="Enter text ...">  </textarea>
      <a href="#message" class="btn btn-large btn-info"  data-toggle="tab">OK</a>
      <a href="#message" class="btn btn-large btn-info"  data-toggle="tab">Cancel</a>

我想将click方法绑定到'div'元素,当单击其中一个子'a'元素时,请执行单独的操作。我试图使用按钮文本区分它们,但以下不起作用:

$(function(){

$('#message').click(function(){

if($(this + ">a").is(":contains(OK)")) {

        console.log("OK!!");

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

好的,有两种方法可以做到这一点:

.find(选择器)

 if(this).find("a").is(":contains(OK)")) {

    console.log("OK!!");

OR

$(选择器,上下文)

 if("a",this).is(":contains(OK)")) {

    console.log("OK!!");

答案 1 :(得分:1)

在javascript中,this本质上是当前函数的上下文。在jQuery事件回调中,this被设置为事件的源元素 - 而不是选择器字符串,这就是您将其视为的内容。

相反,您希望进行如下测试:if($("a", this).is(":contains(OK)")) {

这是有效的,因为jQuery selector的第二个参数是要搜索的上下文,因此您只搜索点击源元素下的a标记。

答案 2 :(得分:1)

将click元素绑定到Div,然后检查A标记的文本字符串将使每个点击都发生这两个事件。您希望在每个A标记上绑定2个单独的单击事件。为每个A标记添加ID,然后尝试此代码

$('#okLinkID').click(function(){
  console.log("OK!!");
});

$('#cancelLinkID').click(function(){
  console.log("Cancel!!");
});

答案 3 :(得分:1)

//只将一个侦听器附加到#message div并侦听其中的任何“a”元素。

$('a','#message').on('click',function(){
    var $this = $(this),
        btnText = $this.text();
    console.log(btnText); 
});

http://jsfiddle.net/YA7Ds/