2017-03-02 59 views
2
<a href="/user/SOMEUSERNAME">SOMEUSERNAME</a> 
<div class="col s9"> 
    <p id="p_50">Some message</p> 
    <br> 
    <br> 
    <span class="forumtools"> 
    <strong> 
     <a onclick="quote(\'p#p_50\')">Quote</a> 
    </strong> 
    <span class="right">Written SOMEDATE</span> 
    </span> 
</div> 

的JQuery/JS:查找前一个<a>元素?

function quote(post) { $(post).text(); } 

本工程以获取职位信息,但我要如何去寻找用户名?

我试过使用$(post).prev('a').text();$(post).parent().prev('a').text();,但似乎没有任何工作。

+0

您可以使用https://api.jquery .com/prev /获取上一个元素。 – Oddadmix

+0

针对您的问题,您可以使用用户名在一个元素上添加数据用户名。 – Oddadmix

+0

@Oddadmix OP发布他们已经尝试过,并且不起作用 –

回答

1

你可以不用jQuery的。如果可能的话,更改HTML和当前链接传递给函数,就像这样:

<a onclick="quote(\'p#p_50\', this)">Quote</a> 

然后你就可以通过所有链接只是搜索:

function quote(str, currentLink) { 
    var allLinks = document.getElementsByTagName("a"); // get all links in document 
    var index = allLinks.indexOf(currentLink); 
    if (index > 0) { 
    var prevLink = allLinks[index-1]; 
    console.log(prevLink); // log it to browser console 
    } else { 
    console.log("there is no previous link"); 
    } 
} 
0

通过查看DOM结构,它应该与$(post).parent().prev().text()一起使用。

替代方式,你怎么样包装所有的人都用<div>,像这样:XD

<div id="message1"> 
<a href="/user/SOMEUSERNAME">SOMEUSERNAME</a> 
<div class="col s9"> 
    <p id="p_50">Some message</p> 
    <br> 
    <br> 
    <span class="forumtools"> 
    <strong> 
     <a onclick="quote(\'#message1\')">Quote</a> //change to wrapper id 
    </strong> 
    <span class="right">Written SOMEDATE</span> 
    </span> 
</div> 
</div> 

然后得到那个职位的文字:$(post).find('#p_50').text();

来获取用户名:$(post).find('a:first').text();

+1

这样的帖子只要确保告诉OP像'$(post).parent()。prev()。text()。'这样的查询非常脆弱,OP应该更好地构建HTML而不是编写代码,即使在HTML中发生微小变化,代码也会发生变化。 –

0

看看你的示例HTML,如果你在p,只需去父元素,并得到最接近的a,你应该没事的:

function quote(post) { 
    var post = $(post).text(); 
    var user = $(post).parent().closest('a').text(); 
} 
0

也许使用父(),然后先前的()

var ancortext = $(post).parent().prev().text(); 

下面的函数的例子。

function username(post) { 

    return $(post).parent().prev().text(); 
} 

注意:这个味道对我来说很重要,你的代码和这种HTML结构非常相关。如果你改变HTML,很可能你的javascript会崩溃。

我已将您的代码复制到我自己的HTML文档中,并确认上面的jquery方法调用输出所需的结果。如果你不是,那么你的源HTML和你发布的源代码有所不同,或者你的jQuery功能与此答案中陈述的不同:))

+0

这是因为你的JS小提琴是错误的。 https://jsfiddle.net/wrco905a/10/ –

0

你的onclick属性是错误的,因为onclick接受javascript,所以该值可以是支持js,然后onclick =“quote('p#p50')”。

function quote(post) { 
 
     var subject = $(post).text(); 
 
     var user=$(post).parent().prev('a').text(); 
 
     console.log('posted '+subject+' by '+user); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="/user/SOMEUSERNAME">SOMEUSERNAME</a> 
 
<div class="col s9"> 
 
    <p id="p_50">Some message</p> 
 
    <br> 
 
    <br> 
 
    <span class="forumtools"> 
 
    <strong> 
 
     <a onclick="quote('p#p_50')">Quote</a> 
 
    </strong> 
 
    <span class="right">Written SOMEDATE</span> 
 
    </span> 
 
</div>