.before()| jqueryAPI 2.2 中文手册- AspRain.cn 致力于Web开发技术翻译整理

jQuery API 2.2.0

.before()

分类:操纵 > DOM外部插入

返回: jQuery

.before( content [, content ] )

描述:在匹配的元素集合的每个元素的前面,插入用参数指定的内容。

加入于: 1.0
.before( content [, content ] )
  • content
    类型:htmlString or Element or Array or jQuery
    用来插入到匹配的元素集合中每个元素前面的HTML字符串、DOM元素、元素的数组,或者jQuery对象。
  • content
    类型:htmlString or Element or Array or jQuery
    一个或更多的额外的DOM元素、元素数组、HTML字符串,或者jQuery对象,用来插入到匹配的元素集合中的每个元素前面。
加入于: 1.4
.before( function )
  • function
    类型:FunctionInteger index ) => htmlString or Element or jQuery
    一个返回HTML字符串、DOM元素或者jQuery对象的函数,返回值将插入到匹配的元素集合中每个元素的前面。检索元素在集合中的索引位置作为参数。在函数内部,this引用了集合中的当前元素。
加入于: 1.10
.before( function )
  • function
    类型:FunctionInteger index, String html ) => htmlString or Element or jQuery
    一个返回HTML字符串、DOM元素或者jQuery对象的函数,返回值将插入到匹配的元素集合中每个元素的前面。检索元素在集合中的索引位置以及元素的旧HTML值作为参数。在函数内部,this引用了集合中的当前元素。

.before()方法和.insertBefore()方法执行了同样的任务。主要区别是在句法中——具体地说,是内容和目标的位置。利用.before()方法,被插入的内容来自方法的参数:$(target).before(contentToBeInserted)。相较之下,利用.insertBefore()方法,要插入的内容在方法的前面,插入到目标的前面,目标是传递给.insertBefore()方法的参数:$(contentToBeInserted).insertBefore(target)

设想下面的HTML:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

你可以创建内容,并把它们一次性插入到若干个元素前面:

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

每个div.inner得到这些新内容:

<div class="container">
  <h2>Greetings</h2>
  <p>Test</p>
  <div class="inner">Hello</div>
  <p>Test</p>
  <div class="inner">Goodbye</div>
</div>

你可以在网页上选择一个元素,并把它插入到另一个元素前面:

$( ".container" ).before( $( "h2" ) );

如果以这种方式把一个元素选中并插入到DOM中另一个位置,它会被移到目标前面,而不是被克隆到目标前面。

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

重要:然而,如果有超过一个目标元素,将创建插入元素的克隆副本,以用于每个目标,除了最后一个目标。

附加参数

类似于别的添加内容的方法,比如说.prepend().after().before()也支持传入多个参数作为输入。支持的输入包括了DOM元素,jQuery对象、HTML字符串和DOM元素数组。

举个例子,下成的代码将把两个新的<div>以及一个已有的<div>插入到第一个段落文本前面:

var newdiv1 = $( "<div id='object1'/>" ),
  newdiv2 = document.createElement( "div" ),
  existingdiv1 = document.getElementById( "foo" );
 
$( "p" ).first().before( newdiv1, [ newdiv2, existingdiv1 ] );

因为.before()方法可以接受任意数量的附加参数,传入三个<div>作为三个独立的参数,也可以实现同样的结果,像这样:$( "p" ).first().before( $newdiv1, newdiv2, existingdiv1 )。参数的类型和数量很大程度上取决于在代码中被收集起来的元素。

其它说明

  • 在jQuery 1.9以前的版本中,如果集合中的第一个节点没有联系到一个document,.before()方法会试图添加或改当前jQuery集合中的节点,那样的话,会返回一个新jQuery集合,而不是返回原始的集合。这个方法不一定能够返回一个新的结果,取决于它的参数的数量或者它的参数的连接性。自从jQuery 1.9版以来,.after().before().replaceWith()方法将总是返回原始的未修改的集合。试图在没有父元素的节点上使用这些方法没有什么效果那是说,集合以及它包含的节点都没有改变。
  • 根据设计意图,任何可以接受一个HTML字符串的jQuery构造器或者方法——jQuery().append().after()等等——都可以潜在地执行代码。这可能发生脚本标签注入,或者使用HTML元素属性执行代码(例如,<img onload="">)。千万不要用这些方法来插入从不可信任的来源获得的字符串,比如说URL查询参数、cookies,或者表单输入。这样做会导致跨站脚本缺陷(XSS)。在往document添加内容之前要删除或转义一切的用户输入。

示例

在所有段落文本之前插入一些HTML。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>before demo</title>
  <style>
  p {
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<p> is what I said...</p>
 
<script>
$( "p" ).before( "<b>Hello</b>" );
</script>
 
</body>
</html>

演示结果

在所有段落文本文件之前插入一个DOM元素。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>before demo</title>
  <style>
  p {
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<p> is what I said...</p>
 
<script>
$( "p" ).before( document.createTextNode( "Hello" ) );
</script>
 
</body>
</html>

演示结果

在所有的段落文本前面插入一个jQuery对象(近似于一个DOM元素的数组)。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>before demo</title>
  <style>
  p {
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<p> is what I said...</p><b>Hello</b>
 
<script>
$( "p" ).before( $( "b" ) );
</script>
 
</body>
</html>

演示结果

如果网页上不能运行示例,请点击http://www.asprain.cn/jQueryAPI/before.htm查看示例。

如果你觉得本文档对你有用,欢迎给翻译作者支付宝打赏,支持翻译作者源源不断翻译更多有用的技术文档。