2017-03-02 85 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>