.after()


.after( content [, content ] )傳回: jQuery

說明: 在已配對元素組中的每個元素後方,插入由參數指定的內容。

  • 新增版本: 1.0.after( content [, content ] )

    • content
      類型: htmlStringElementTextArrayjQuery
      HTML 字串、DOM 元素、文字節點、元素和文字節點陣列,或 jQuery 物件,用於插入在已配對元素組中的每個元素後方。
    • content
      類型: htmlStringElementTextArrayjQuery
      一個或多個額外的 DOM 元素、文字節點、元素和文字節點陣列、HTML 字串,或 jQuery 物件,用於插入在已配對元素組中的每個元素後方。
  • 新增版本: 1.4.after( function )

    • function
      類型:函式( 整數 index ) => html 字串元素文字節點jQuery
      一個函式,傳回一個 HTML 字串、DOM 元素、文字節點或 jQuery 物件,以插入到符合元素集合中每個元素之後。接收元素在集合中的索引位置作為引數。在函式中,this 指向集合中的目前元素。
  • 版本新增:1.10-and-2.0.after( function-html )

    • function-html
      類型:函式( 整數 index, 字串 html ) => html 字串元素文字節點jQuery
      一個函式,傳回一個 HTML 字串、DOM 元素、文字節點或 jQuery 物件,以插入到符合元素集合中每個元素之後。接收元素在集合中的索引位置和元素的舊 HTML 值作為引數。在函式中,this 指向集合中的目前元素。

.after().insertAfter() 方法執行相同的任務。主要的差異在於語法,特別是在內容和目標的放置上。使用 .after() 時,要插入的內容來自方法的引數:$(target).after(contentToBeInserted)。另一方面,使用 .insertAfter() 時,內容會出現在方法之前,並插入到目標之後,而目標則傳遞為 .insertAfter() 方法的引數:$(contentToBeInserted).insertAfter(target)

使用以下 HTML

1
2
3
4
5
<div class="container">
<h2>Greetings</h2>
<div class="inner">Hello</div>
<div class="inner">Goodbye</div>
</div>

可以建立內容,然後一次插入到多個元素之後

1
$( ".inner" ).after( "<p>Test</p>" );

每個內部 <div> 元素都會取得這個新內容

1
2
3
4
5
6
7
<div class="container">
<h2>Greetings</h2>
<div class="inner">Hello</div>
<p>Test</p>
<div class="inner">Goodbye</div>
<p>Test</p>
</div>

DOM 中的元素也可以選取並插入到另一個元素之後

1
$( ".container" ).after( $( "h2" ) );

如果以這種方式選取的元素插入到 DOM 中其他地方的單一位置,則會將其移動,而不是複製

1
2
3
4
5
<div class="container">
<div class="inner">Hello</div>
<div class="inner">Goodbye</div>
</div>
<h2>Greetings</h2>

重要事項:不過,如果有多個目標元素,則會為每個目標(最後一個目標除外)建立已插入元素的複製副本。

傳遞函式

從 jQuery 1.4 開始,.after() 支援傳遞傳回要插入元素的函式。

1
2
3
$( "p" ).after(function() {
return "<div>" + this.className + "</div>";
});

此範例會在每個段落之後插入 <div>,每個新的 <div> 都包含其前一個段落的類別名稱。

其他引數

與其他新增內容的方法(例如 .prepend().before())類似,.after() 也支援將多個引數傳入作為輸入。支援的輸入包括 DOM 元素、jQuery 物件、HTML 字串和 DOM 元素陣列。

例如,以下會在第一個段落之後插入兩個新的 <div> 和一個現有的 <div>

1
2
3
4
5
var $newdiv1 = $( "<div id='object1'></div>" ),
newdiv2 = document.createElement( "div" ),
existingdiv1 = document.getElementById( "foo" );
$( "p" ).first().after( $newdiv1, [ newdiv2, existingdiv1 ] );

由於 .after() 可以接受任意數量的其他引數,因此可以透過將三個 <div> 傳入作為三個獨立的引數來達成相同的結果,如下所示:$( "p" ).first().after( $newdiv1, newdiv2, existingdiv1 )。引數的類型和數量在很大程度上取決於程式碼中收集的元素。

其他注意事項

  • 在 jQuery 1.9 之前,如果集合中的第一個節點未連接到文件,.after() 會嘗試新增或變更當前 jQuery 集合中的節點,並在這些情況下傳回新的 jQuery 集合,而非原始集合。此方法可能會或可能不會傳回新的結果,具體取決於其參數的數量或連接性!從 jQuery 1.9 開始,.after().before().replaceWith() 始終傳回原始未修改的集合。嘗試對沒有父項目的節點使用這些方法不會產生任何效果,也就是說,集合及其包含的節點都不會變更。
  • 根據設計,任何接受 HTML 字串的 jQuery 建構函式或方法(例如 jQuery().append().after() 等)都可能執行程式碼。這可能是透過注入腳本標籤或使用會執行程式碼的 HTML 屬性(例如 <img onload="">)發生的。請勿使用這些方法插入從不可信來源(例如 URL 查詢參數、Cookie 或表單輸入)取得的字串。這麼做可能會造成跨網站腳本(XSS)漏洞。在將內容新增到文件之前,請移除或跳脫任何使用者輸入。

範例

在所有段落之後插入一些 HTML。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>after demo</title>
<style>
p {
background: yellow;
}
</style>
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
<p>I would like to say: </p>
<script>
$( "p" ).after( "<b>Hello</b>" );
</script>
</body>
</html>

示範

在所有段落之後插入 DOM 元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>after demo</title>
<style>
p {
background: yellow;
}
</style>
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
<p>I would like to say: </p>
<script>
$( "p" ).after( document.createTextNode( "Hello" ) );
</script>
</body>
</html>

示範

在所有段落之後插入 jQuery 物件(類似於 DOM 元素陣列)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>after demo</title>
<style>
p {
background: yellow;
}
</style>
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
<b>Hello</b>
<p>I would like to say: </p>
<script>
$( "p" ).after( $( "b" ) );
</script>
</body>
</html>

示範