/* automatically generated by JSCoverage - do not edit */
try {
  if (typeof top === 'object' && top !== null && typeof top.opener === 'object' && top.opener !== null) {
    // this is a browser window that was opened from another window

    if (! top.opener._$jscoverage) {
      top.opener._$jscoverage = {};
    }
  }
}
catch (e) {}

try {
  if (typeof top === 'object' && top !== null) {
    // this is a browser window

    try {
      if (typeof top.opener === 'object' && top.opener !== null && top.opener._$jscoverage) {
        top._$jscoverage = top.opener._$jscoverage;
      }
    }
    catch (e) {}

    if (! top._$jscoverage) {
      top._$jscoverage = {};
    }
  }
}
catch (e) {}

try {
  if (typeof top === 'object' && top !== null && top._$jscoverage) {
    _$jscoverage = top._$jscoverage;
  }
}
catch (e) {}
if (typeof _$jscoverage !== 'object') {
  _$jscoverage = {};
}
if (! _$jscoverage['core/Range.js']) {
  _$jscoverage['core/Range.js'] = [];
  _$jscoverage['core/Range.js'][22] = 0;
  _$jscoverage['core/Range.js'][23] = 0;
  _$jscoverage['core/Range.js'][31] = 0;
  _$jscoverage['core/Range.js'][32] = 0;
  _$jscoverage['core/Range.js'][38] = 0;
  _$jscoverage['core/Range.js'][39] = 0;
  _$jscoverage['core/Range.js'][41] = 0;
  _$jscoverage['core/Range.js'][43] = 0;
  _$jscoverage['core/Range.js'][44] = 0;
  _$jscoverage['core/Range.js'][45] = 0;
  _$jscoverage['core/Range.js'][47] = 0;
  _$jscoverage['core/Range.js'][48] = 0;
  _$jscoverage['core/Range.js'][49] = 0;
  _$jscoverage['core/Range.js'][50] = 0;
  _$jscoverage['core/Range.js'][51] = 0;
  _$jscoverage['core/Range.js'][54] = 0;
  _$jscoverage['core/Range.js'][55] = 0;
  _$jscoverage['core/Range.js'][56] = 0;
  _$jscoverage['core/Range.js'][57] = 0;
  _$jscoverage['core/Range.js'][60] = 0;
  _$jscoverage['core/Range.js'][61] = 0;
  _$jscoverage['core/Range.js'][64] = 0;
  _$jscoverage['core/Range.js'][67] = 0;
  _$jscoverage['core/Range.js'][74] = 0;
  _$jscoverage['core/Range.js'][75] = 0;
  _$jscoverage['core/Range.js'][77] = 0;
  _$jscoverage['core/Range.js'][78] = 0;
  _$jscoverage['core/Range.js'][80] = 0;
  _$jscoverage['core/Range.js'][81] = 0;
  _$jscoverage['core/Range.js'][83] = 0;
  _$jscoverage['core/Range.js'][84] = 0;
  _$jscoverage['core/Range.js'][85] = 0;
  _$jscoverage['core/Range.js'][87] = 0;
  _$jscoverage['core/Range.js'][89] = 0;
  _$jscoverage['core/Range.js'][91] = 0;
  _$jscoverage['core/Range.js'][92] = 0;
  _$jscoverage['core/Range.js'][94] = 0;
  _$jscoverage['core/Range.js'][95] = 0;
  _$jscoverage['core/Range.js'][96] = 0;
  _$jscoverage['core/Range.js'][97] = 0;
  _$jscoverage['core/Range.js'][98] = 0;
  _$jscoverage['core/Range.js'][99] = 0;
  _$jscoverage['core/Range.js'][101] = 0;
  _$jscoverage['core/Range.js'][102] = 0;
  _$jscoverage['core/Range.js'][105] = 0;
  _$jscoverage['core/Range.js'][109] = 0;
  _$jscoverage['core/Range.js'][110] = 0;
  _$jscoverage['core/Range.js'][112] = 0;
  _$jscoverage['core/Range.js'][113] = 0;
  _$jscoverage['core/Range.js'][114] = 0;
  _$jscoverage['core/Range.js'][116] = 0;
  _$jscoverage['core/Range.js'][117] = 0;
  _$jscoverage['core/Range.js'][118] = 0;
  _$jscoverage['core/Range.js'][120] = 0;
  _$jscoverage['core/Range.js'][122] = 0;
  _$jscoverage['core/Range.js'][123] = 0;
  _$jscoverage['core/Range.js'][124] = 0;
  _$jscoverage['core/Range.js'][125] = 0;
  _$jscoverage['core/Range.js'][127] = 0;
  _$jscoverage['core/Range.js'][128] = 0;
  _$jscoverage['core/Range.js'][129] = 0;
  _$jscoverage['core/Range.js'][130] = 0;
  _$jscoverage['core/Range.js'][131] = 0;
  _$jscoverage['core/Range.js'][133] = 0;
  _$jscoverage['core/Range.js'][134] = 0;
  _$jscoverage['core/Range.js'][138] = 0;
  _$jscoverage['core/Range.js'][139] = 0;
  _$jscoverage['core/Range.js'][142] = 0;
  _$jscoverage['core/Range.js'][143] = 0;
  _$jscoverage['core/Range.js'][144] = 0;
  _$jscoverage['core/Range.js'][145] = 0;
  _$jscoverage['core/Range.js'][147] = 0;
  _$jscoverage['core/Range.js'][148] = 0;
  _$jscoverage['core/Range.js'][149] = 0;
  _$jscoverage['core/Range.js'][152] = 0;
  _$jscoverage['core/Range.js'][154] = 0;
  _$jscoverage['core/Range.js'][155] = 0;
  _$jscoverage['core/Range.js'][157] = 0;
  _$jscoverage['core/Range.js'][158] = 0;
  _$jscoverage['core/Range.js'][159] = 0;
  _$jscoverage['core/Range.js'][193] = 0;
  _$jscoverage['core/Range.js'][194] = 0;
  _$jscoverage['core/Range.js'][195] = 0;
  _$jscoverage['core/Range.js'][199] = 0;
  _$jscoverage['core/Range.js'][200] = 0;
  _$jscoverage['core/Range.js'][208] = 0;
  _$jscoverage['core/Range.js'][209] = 0;
  _$jscoverage['core/Range.js'][210] = 0;
  _$jscoverage['core/Range.js'][211] = 0;
  _$jscoverage['core/Range.js'][212] = 0;
  _$jscoverage['core/Range.js'][213] = 0;
  _$jscoverage['core/Range.js'][214] = 0;
  _$jscoverage['core/Range.js'][218] = 0;
  _$jscoverage['core/Range.js'][219] = 0;
  _$jscoverage['core/Range.js'][220] = 0;
  _$jscoverage['core/Range.js'][223] = 0;
  _$jscoverage['core/Range.js'][235] = 0;
  _$jscoverage['core/Range.js'][236] = 0;
  _$jscoverage['core/Range.js'][237] = 0;
  _$jscoverage['core/Range.js'][238] = 0;
  _$jscoverage['core/Range.js'][239] = 0;
  _$jscoverage['core/Range.js'][240] = 0;
  _$jscoverage['core/Range.js'][241] = 0;
  _$jscoverage['core/Range.js'][245] = 0;
  _$jscoverage['core/Range.js'][263] = 0;
  _$jscoverage['core/Range.js'][294] = 0;
  _$jscoverage['core/Range.js'][295] = 0;
  _$jscoverage['core/Range.js'][296] = 0;
  _$jscoverage['core/Range.js'][298] = 0;
  _$jscoverage['core/Range.js'][299] = 0;
  _$jscoverage['core/Range.js'][300] = 0;
  _$jscoverage['core/Range.js'][301] = 0;
  _$jscoverage['core/Range.js'][302] = 0;
  _$jscoverage['core/Range.js'][305] = 0;
  _$jscoverage['core/Range.js'][338] = 0;
  _$jscoverage['core/Range.js'][373] = 0;
  _$jscoverage['core/Range.js'][407] = 0;
  _$jscoverage['core/Range.js'][440] = 0;
  _$jscoverage['core/Range.js'][473] = 0;
  _$jscoverage['core/Range.js'][504] = 0;
  _$jscoverage['core/Range.js'][535] = 0;
  _$jscoverage['core/Range.js'][568] = 0;
  _$jscoverage['core/Range.js'][602] = 0;
  _$jscoverage['core/Range.js'][633] = 0;
  _$jscoverage['core/Range.js'][665] = 0;
  _$jscoverage['core/Range.js'][691] = 0;
  _$jscoverage['core/Range.js'][720] = 0;
  _$jscoverage['core/Range.js'][750] = 0;
  _$jscoverage['core/Range.js'][751] = 0;
  _$jscoverage['core/Range.js'][824] = 0;
  _$jscoverage['core/Range.js'][825] = 0;
  _$jscoverage['core/Range.js'][826] = 0;
  _$jscoverage['core/Range.js'][827] = 0;
  _$jscoverage['core/Range.js'][829] = 0;
  _$jscoverage['core/Range.js'][830] = 0;
  _$jscoverage['core/Range.js'][832] = 0;
  _$jscoverage['core/Range.js'][833] = 0;
  _$jscoverage['core/Range.js'][880] = 0;
  _$jscoverage['core/Range.js'][882] = 0;
  _$jscoverage['core/Range.js'][883] = 0;
  _$jscoverage['core/Range.js'][885] = 0;
  _$jscoverage['core/Range.js'][888] = 0;
  _$jscoverage['core/Range.js'][890] = 0;
  _$jscoverage['core/Range.js'][891] = 0;
  _$jscoverage['core/Range.js'][893] = 0;
  _$jscoverage['core/Range.js'][894] = 0;
  _$jscoverage['core/Range.js'][898] = 0;
  _$jscoverage['core/Range.js'][901] = 0;
  _$jscoverage['core/Range.js'][1043] = 0;
  _$jscoverage['core/Range.js'][1046] = 0;
  _$jscoverage['core/Range.js'][1047] = 0;
  _$jscoverage['core/Range.js'][1048] = 0;
  _$jscoverage['core/Range.js'][1049] = 0;
  _$jscoverage['core/Range.js'][1050] = 0;
  _$jscoverage['core/Range.js'][1053] = 0;
  _$jscoverage['core/Range.js'][1055] = 0;
  _$jscoverage['core/Range.js'][1132] = 0;
  _$jscoverage['core/Range.js'][1133] = 0;
  _$jscoverage['core/Range.js'][1137] = 0;
  _$jscoverage['core/Range.js'][1138] = 0;
  _$jscoverage['core/Range.js'][1139] = 0;
  _$jscoverage['core/Range.js'][1141] = 0;
  _$jscoverage['core/Range.js'][1142] = 0;
  _$jscoverage['core/Range.js'][1144] = 0;
  _$jscoverage['core/Range.js'][1146] = 0;
  _$jscoverage['core/Range.js'][1147] = 0;
  _$jscoverage['core/Range.js'][1148] = 0;
  _$jscoverage['core/Range.js'][1149] = 0;
  _$jscoverage['core/Range.js'][1151] = 0;
  _$jscoverage['core/Range.js'][1154] = 0;
  _$jscoverage['core/Range.js'][1155] = 0;
  _$jscoverage['core/Range.js'][1158] = 0;
  _$jscoverage['core/Range.js'][1159] = 0;
  _$jscoverage['core/Range.js'][1160] = 0;
  _$jscoverage['core/Range.js'][1161] = 0;
  _$jscoverage['core/Range.js'][1162] = 0;
  _$jscoverage['core/Range.js'][1163] = 0;
  _$jscoverage['core/Range.js'][1165] = 0;
  _$jscoverage['core/Range.js'][1166] = 0;
  _$jscoverage['core/Range.js'][1170] = 0;
  _$jscoverage['core/Range.js'][1302] = 0;
  _$jscoverage['core/Range.js'][1303] = 0;
  _$jscoverage['core/Range.js'][1305] = 0;
  _$jscoverage['core/Range.js'][1306] = 0;
  _$jscoverage['core/Range.js'][1307] = 0;
  _$jscoverage['core/Range.js'][1308] = 0;
  _$jscoverage['core/Range.js'][1310] = 0;
  _$jscoverage['core/Range.js'][1311] = 0;
  _$jscoverage['core/Range.js'][1312] = 0;
  _$jscoverage['core/Range.js'][1318] = 0;
  _$jscoverage['core/Range.js'][1319] = 0;
  _$jscoverage['core/Range.js'][1320] = 0;
  _$jscoverage['core/Range.js'][1322] = 0;
  _$jscoverage['core/Range.js'][1361] = 0;
  _$jscoverage['core/Range.js'][1362] = 0;
  _$jscoverage['core/Range.js'][1363] = 0;
  _$jscoverage['core/Range.js'][1364] = 0;
  _$jscoverage['core/Range.js'][1366] = 0;
  _$jscoverage['core/Range.js'][1367] = 0;
  _$jscoverage['core/Range.js'][1369] = 0;
  _$jscoverage['core/Range.js'][1370] = 0;
  _$jscoverage['core/Range.js'][1371] = 0;
  _$jscoverage['core/Range.js'][1373] = 0;
  _$jscoverage['core/Range.js'][1375] = 0;
  _$jscoverage['core/Range.js'][1376] = 0;
  _$jscoverage['core/Range.js'][1378] = 0;
  _$jscoverage['core/Range.js'][1397] = 0;
  _$jscoverage['core/Range.js'][1410] = 0;
  _$jscoverage['core/Range.js'][1412] = 0;
  _$jscoverage['core/Range.js'][1413] = 0;
  _$jscoverage['core/Range.js'][1414] = 0;
  _$jscoverage['core/Range.js'][1416] = 0;
  _$jscoverage['core/Range.js'][1417] = 0;
  _$jscoverage['core/Range.js'][1418] = 0;
  _$jscoverage['core/Range.js'][1420] = 0;
  _$jscoverage['core/Range.js'][1421] = 0;
  _$jscoverage['core/Range.js'][1422] = 0;
  _$jscoverage['core/Range.js'][1424] = 0;
  _$jscoverage['core/Range.js'][1425] = 0;
  _$jscoverage['core/Range.js'][1440] = 0;
  _$jscoverage['core/Range.js'][1442] = 0;
  _$jscoverage['core/Range.js'][1443] = 0;
  _$jscoverage['core/Range.js'][1444] = 0;
  _$jscoverage['core/Range.js'][1445] = 0;
  _$jscoverage['core/Range.js'][1446] = 0;
  _$jscoverage['core/Range.js'][1448] = 0;
  _$jscoverage['core/Range.js'][1450] = 0;
  _$jscoverage['core/Range.js'][1511] = 0;
  _$jscoverage['core/Range.js'][1513] = 0;
  _$jscoverage['core/Range.js'][1514] = 0;
  _$jscoverage['core/Range.js'][1515] = 0;
  _$jscoverage['core/Range.js'][1516] = 0;
  _$jscoverage['core/Range.js'][1517] = 0;
  _$jscoverage['core/Range.js'][1519] = 0;
  _$jscoverage['core/Range.js'][1520] = 0;
  _$jscoverage['core/Range.js'][1523] = 0;
  _$jscoverage['core/Range.js'][1525] = 0;
  _$jscoverage['core/Range.js'][1526] = 0;
  _$jscoverage['core/Range.js'][1527] = 0;
  _$jscoverage['core/Range.js'][1528] = 0;
  _$jscoverage['core/Range.js'][1529] = 0;
  _$jscoverage['core/Range.js'][1531] = 0;
  _$jscoverage['core/Range.js'][1532] = 0;
  _$jscoverage['core/Range.js'][1534] = 0;
  _$jscoverage['core/Range.js'][1535] = 0;
  _$jscoverage['core/Range.js'][1537] = 0;
  _$jscoverage['core/Range.js'][1538] = 0;
  _$jscoverage['core/Range.js'][1539] = 0;
  _$jscoverage['core/Range.js'][1540] = 0;
  _$jscoverage['core/Range.js'][1542] = 0;
  _$jscoverage['core/Range.js'][1544] = 0;
  _$jscoverage['core/Range.js'][1546] = 0;
  _$jscoverage['core/Range.js'][1548] = 0;
  _$jscoverage['core/Range.js'][1549] = 0;
  _$jscoverage['core/Range.js'][1550] = 0;
  _$jscoverage['core/Range.js'][1551] = 0;
  _$jscoverage['core/Range.js'][1552] = 0;
  _$jscoverage['core/Range.js'][1554] = 0;
  _$jscoverage['core/Range.js'][1555] = 0;
  _$jscoverage['core/Range.js'][1557] = 0;
  _$jscoverage['core/Range.js'][1558] = 0;
  _$jscoverage['core/Range.js'][1560] = 0;
  _$jscoverage['core/Range.js'][1561] = 0;
  _$jscoverage['core/Range.js'][1563] = 0;
  _$jscoverage['core/Range.js'][1567] = 0;
  _$jscoverage['core/Range.js'][1568] = 0;
  _$jscoverage['core/Range.js'][1569] = 0;
  _$jscoverage['core/Range.js'][1570] = 0;
  _$jscoverage['core/Range.js'][1572] = 0;
  _$jscoverage['core/Range.js'][1573] = 0;
  _$jscoverage['core/Range.js'][1575] = 0;
  _$jscoverage['core/Range.js'][1577] = 0;
  _$jscoverage['core/Range.js'][1578] = 0;
  _$jscoverage['core/Range.js'][1579] = 0;
  _$jscoverage['core/Range.js'][1581] = 0;
  _$jscoverage['core/Range.js'][1582] = 0;
  _$jscoverage['core/Range.js'][1584] = 0;
  _$jscoverage['core/Range.js'][1587] = 0;
  _$jscoverage['core/Range.js'][1597] = 0;
  _$jscoverage['core/Range.js'][1598] = 0;
  _$jscoverage['core/Range.js'][1603] = 0;
  _$jscoverage['core/Range.js'][1605] = 0;
  _$jscoverage['core/Range.js'][1608] = 0;
  _$jscoverage['core/Range.js'][1611] = 0;
  _$jscoverage['core/Range.js'][1624] = 0;
  _$jscoverage['core/Range.js'][1625] = 0;
  _$jscoverage['core/Range.js'][1627] = 0;
  _$jscoverage['core/Range.js'][1629] = 0;
  _$jscoverage['core/Range.js'][1632] = 0;
  _$jscoverage['core/Range.js'][1638] = 0;
  _$jscoverage['core/Range.js'][1639] = 0;
  _$jscoverage['core/Range.js'][1640] = 0;
  _$jscoverage['core/Range.js'][1641] = 0;
  _$jscoverage['core/Range.js'][1642] = 0;
  _$jscoverage['core/Range.js'][1643] = 0;
  _$jscoverage['core/Range.js'][1644] = 0;
  _$jscoverage['core/Range.js'][1645] = 0;
  _$jscoverage['core/Range.js'][1648] = 0;
  _$jscoverage['core/Range.js'][1649] = 0;
  _$jscoverage['core/Range.js'][1650] = 0;
  _$jscoverage['core/Range.js'][1651] = 0;
  _$jscoverage['core/Range.js'][1652] = 0;
  _$jscoverage['core/Range.js'][1653] = 0;
  _$jscoverage['core/Range.js'][1654] = 0;
  _$jscoverage['core/Range.js'][1656] = 0;
  _$jscoverage['core/Range.js'][1658] = 0;
  _$jscoverage['core/Range.js'][1660] = 0;
  _$jscoverage['core/Range.js'][1661] = 0;
  _$jscoverage['core/Range.js'][1663] = 0;
  _$jscoverage['core/Range.js'][1664] = 0;
  _$jscoverage['core/Range.js'][1666] = 0;
  _$jscoverage['core/Range.js'][1667] = 0;
  _$jscoverage['core/Range.js'][1668] = 0;
  _$jscoverage['core/Range.js'][1669] = 0;
  _$jscoverage['core/Range.js'][1670] = 0;
  _$jscoverage['core/Range.js'][1672] = 0;
  _$jscoverage['core/Range.js'][1673] = 0;
  _$jscoverage['core/Range.js'][1676] = 0;
  _$jscoverage['core/Range.js'][1677] = 0;
  _$jscoverage['core/Range.js'][1678] = 0;
  _$jscoverage['core/Range.js'][1679] = 0;
  _$jscoverage['core/Range.js'][1680] = 0;
  _$jscoverage['core/Range.js'][1683] = 0;
  _$jscoverage['core/Range.js'][1686] = 0;
  _$jscoverage['core/Range.js'][1696] = 0;
  _$jscoverage['core/Range.js'][1697] = 0;
  _$jscoverage['core/Range.js'][1698] = 0;
  _$jscoverage['core/Range.js'][1699] = 0;
  _$jscoverage['core/Range.js'][1700] = 0;
  _$jscoverage['core/Range.js'][1701] = 0;
  _$jscoverage['core/Range.js'][1702] = 0;
  _$jscoverage['core/Range.js'][1703] = 0;
  _$jscoverage['core/Range.js'][1705] = 0;
  _$jscoverage['core/Range.js'][1706] = 0;
  _$jscoverage['core/Range.js'][1707] = 0;
  _$jscoverage['core/Range.js'][1710] = 0;
  _$jscoverage['core/Range.js'][1712] = 0;
  _$jscoverage['core/Range.js'][1713] = 0;
  _$jscoverage['core/Range.js'][1714] = 0;
  _$jscoverage['core/Range.js'][1715] = 0;
  _$jscoverage['core/Range.js'][1717] = 0;
  _$jscoverage['core/Range.js'][1718] = 0;
  _$jscoverage['core/Range.js'][1719] = 0;
  _$jscoverage['core/Range.js'][1722] = 0;
  _$jscoverage['core/Range.js'][1724] = 0;
  _$jscoverage['core/Range.js'][1727] = 0;
  _$jscoverage['core/Range.js'][1728] = 0;
  _$jscoverage['core/Range.js'][1729] = 0;
  _$jscoverage['core/Range.js'][1730] = 0;
  _$jscoverage['core/Range.js'][1731] = 0;
  _$jscoverage['core/Range.js'][1732] = 0;
  _$jscoverage['core/Range.js'][1734] = 0;
  _$jscoverage['core/Range.js'][1735] = 0;
  _$jscoverage['core/Range.js'][1736] = 0;
  _$jscoverage['core/Range.js'][1737] = 0;
  _$jscoverage['core/Range.js'][1738] = 0;
  _$jscoverage['core/Range.js'][1739] = 0;
  _$jscoverage['core/Range.js'][1741] = 0;
  _$jscoverage['core/Range.js'][1742] = 0;
  _$jscoverage['core/Range.js'][1744] = 0;
  _$jscoverage['core/Range.js'][1745] = 0;
  _$jscoverage['core/Range.js'][1746] = 0;
  _$jscoverage['core/Range.js'][1748] = 0;
  _$jscoverage['core/Range.js'][1749] = 0;
  _$jscoverage['core/Range.js'][1751] = 0;
  _$jscoverage['core/Range.js'][1753] = 0;
  _$jscoverage['core/Range.js'][1783] = 0;
  _$jscoverage['core/Range.js'][1784] = 0;
  _$jscoverage['core/Range.js'][1785] = 0;
  _$jscoverage['core/Range.js'][1786] = 0;
  _$jscoverage['core/Range.js'][1787] = 0;
  _$jscoverage['core/Range.js'][1788] = 0;
  _$jscoverage['core/Range.js'][1789] = 0;
  _$jscoverage['core/Range.js'][1793] = 0;
  _$jscoverage['core/Range.js'][1802] = 0;
  _$jscoverage['core/Range.js'][1803] = 0;
  _$jscoverage['core/Range.js'][1804] = 0;
  _$jscoverage['core/Range.js'][1805] = 0;
  _$jscoverage['core/Range.js'][1806] = 0;
  _$jscoverage['core/Range.js'][1807] = 0;
  _$jscoverage['core/Range.js'][1808] = 0;
  _$jscoverage['core/Range.js'][1809] = 0;
  _$jscoverage['core/Range.js'][1810] = 0;
  _$jscoverage['core/Range.js'][1812] = 0;
  _$jscoverage['core/Range.js'][1814] = 0;
  _$jscoverage['core/Range.js'][1817] = 0;
  _$jscoverage['core/Range.js'][1818] = 0;
  _$jscoverage['core/Range.js'][1819] = 0;
  _$jscoverage['core/Range.js'][1820] = 0;
  _$jscoverage['core/Range.js'][1821] = 0;
  _$jscoverage['core/Range.js'][1822] = 0;
  _$jscoverage['core/Range.js'][1823] = 0;
  _$jscoverage['core/Range.js'][1824] = 0;
  _$jscoverage['core/Range.js'][1826] = 0;
  _$jscoverage['core/Range.js'][1828] = 0;
  _$jscoverage['core/Range.js'][1830] = 0;
  _$jscoverage['core/Range.js'][1831] = 0;
  _$jscoverage['core/Range.js'][1832] = 0;
  _$jscoverage['core/Range.js'][1834] = 0;
  _$jscoverage['core/Range.js'][1835] = 0;
  _$jscoverage['core/Range.js'][1836] = 0;
  _$jscoverage['core/Range.js'][1837] = 0;
  _$jscoverage['core/Range.js'][1838] = 0;
  _$jscoverage['core/Range.js'][1839] = 0;
  _$jscoverage['core/Range.js'][1842] = 0;
  _$jscoverage['core/Range.js'][1843] = 0;
  _$jscoverage['core/Range.js'][1845] = 0;
  _$jscoverage['core/Range.js'][1846] = 0;
  _$jscoverage['core/Range.js'][1849] = 0;
  _$jscoverage['core/Range.js'][1851] = 0;
  _$jscoverage['core/Range.js'][1853] = 0;
  _$jscoverage['core/Range.js'][1854] = 0;
  _$jscoverage['core/Range.js'][1855] = 0;
  _$jscoverage['core/Range.js'][1858] = 0;
  _$jscoverage['core/Range.js'][1859] = 0;
  _$jscoverage['core/Range.js'][1861] = 0;
  _$jscoverage['core/Range.js'][1866] = 0;
  _$jscoverage['core/Range.js'][1867] = 0;
  _$jscoverage['core/Range.js'][1868] = 0;
  _$jscoverage['core/Range.js'][1871] = 0;
  _$jscoverage['core/Range.js'][1883] = 0;
  _$jscoverage['core/Range.js'][1884] = 0;
  _$jscoverage['core/Range.js'][1885] = 0;
  _$jscoverage['core/Range.js'][1888] = 0;
  _$jscoverage['core/Range.js'][1895] = 0;
  _$jscoverage['core/Range.js'][1897] = 0;
  _$jscoverage['core/Range.js'][1898] = 0;
  _$jscoverage['core/Range.js'][1899] = 0;
  _$jscoverage['core/Range.js'][1900] = 0;
  _$jscoverage['core/Range.js'][1901] = 0;
  _$jscoverage['core/Range.js'][1902] = 0;
  _$jscoverage['core/Range.js'][1905] = 0;
  _$jscoverage['core/Range.js'][1906] = 0;
  _$jscoverage['core/Range.js'][1907] = 0;
  _$jscoverage['core/Range.js'][1908] = 0;
  _$jscoverage['core/Range.js'][1910] = 0;
  _$jscoverage['core/Range.js'][1911] = 0;
  _$jscoverage['core/Range.js'][1912] = 0;
  _$jscoverage['core/Range.js'][1916] = 0;
  _$jscoverage['core/Range.js'][1917] = 0;
  _$jscoverage['core/Range.js'][1918] = 0;
  _$jscoverage['core/Range.js'][1920] = 0;
  _$jscoverage['core/Range.js'][1923] = 0;
  _$jscoverage['core/Range.js'][1928] = 0;
  _$jscoverage['core/Range.js'][1929] = 0;
  _$jscoverage['core/Range.js'][1930] = 0;
  _$jscoverage['core/Range.js'][1931] = 0;
  _$jscoverage['core/Range.js'][1933] = 0;
  _$jscoverage['core/Range.js'][1951] = 0;
  _$jscoverage['core/Range.js'][1952] = 0;
  _$jscoverage['core/Range.js'][1955] = 0;
  _$jscoverage['core/Range.js'][1956] = 0;
  _$jscoverage['core/Range.js'][1957] = 0;
  _$jscoverage['core/Range.js'][1958] = 0;
  _$jscoverage['core/Range.js'][1959] = 0;
  _$jscoverage['core/Range.js'][1967] = 0;
  _$jscoverage['core/Range.js'][1968] = 0;
  _$jscoverage['core/Range.js'][1971] = 0;
  _$jscoverage['core/Range.js'][1973] = 0;
  _$jscoverage['core/Range.js'][2000] = 0;
  _$jscoverage['core/Range.js'][2002] = 0;
  _$jscoverage['core/Range.js'][2003] = 0;
  _$jscoverage['core/Range.js'][2004] = 0;
  _$jscoverage['core/Range.js'][2006] = 0;
  _$jscoverage['core/Range.js'][2007] = 0;
  _$jscoverage['core/Range.js'][2009] = 0;
  _$jscoverage['core/Range.js'][2011] = 0;
  _$jscoverage['core/Range.js'][2012] = 0;
  _$jscoverage['core/Range.js'][2013] = 0;
  _$jscoverage['core/Range.js'][2014] = 0;
  _$jscoverage['core/Range.js'][2015] = 0;
  _$jscoverage['core/Range.js'][2016] = 0;
  _$jscoverage['core/Range.js'][2018] = 0;
  _$jscoverage['core/Range.js'][2020] = 0;
  _$jscoverage['core/Range.js'][2021] = 0;
  _$jscoverage['core/Range.js'][2022] = 0;
  _$jscoverage['core/Range.js'][2024] = 0;
  _$jscoverage['core/Range.js'][2025] = 0;
  _$jscoverage['core/Range.js'][2026] = 0;
  _$jscoverage['core/Range.js'][2027] = 0;
  _$jscoverage['core/Range.js'][2028] = 0;
  _$jscoverage['core/Range.js'][2029] = 0;
  _$jscoverage['core/Range.js'][2031] = 0;
  _$jscoverage['core/Range.js'][2032] = 0;
  _$jscoverage['core/Range.js'][2033] = 0;
  _$jscoverage['core/Range.js'][2034] = 0;
  _$jscoverage['core/Range.js'][2037] = 0;
  _$jscoverage['core/Range.js'][2044] = 0;
  _$jscoverage['core/Range.js'][2046] = 0;
  _$jscoverage['core/Range.js'][2047] = 0;
  _$jscoverage['core/Range.js'][2049] = 0;
  _$jscoverage['core/Range.js'][2050] = 0;
  _$jscoverage['core/Range.js'][2052] = 0;
  _$jscoverage['core/Range.js'][2053] = 0;
  _$jscoverage['core/Range.js'][2054] = 0;
  _$jscoverage['core/Range.js'][2056] = 0;
  _$jscoverage['core/Range.js'][2085] = 0;
  _$jscoverage['core/Range.js'][2086] = 0;
  _$jscoverage['core/Range.js'][2087] = 0;
  _$jscoverage['core/Range.js'][2089] = 0;
  _$jscoverage['core/Range.js'][2090] = 0;
  _$jscoverage['core/Range.js'][2091] = 0;
  _$jscoverage['core/Range.js'][2092] = 0;
  _$jscoverage['core/Range.js'][2093] = 0;
  _$jscoverage['core/Range.js'][2094] = 0;
  _$jscoverage['core/Range.js'][2095] = 0;
  _$jscoverage['core/Range.js'][2098] = 0;
  _$jscoverage['core/Range.js'][2099] = 0;
  _$jscoverage['core/Range.js'][2100] = 0;
  _$jscoverage['core/Range.js'][2102] = 0;
  _$jscoverage['core/Range.js'][2105] = 0;
  _$jscoverage['core/Range.js'][2106] = 0;
  _$jscoverage['core/Range.js'][2108] = 0;
  _$jscoverage['core/Range.js'][2112] = 0;
  _$jscoverage['core/Range.js'][2113] = 0;
  _$jscoverage['core/Range.js'][2114] = 0;
  _$jscoverage['core/Range.js'][2214] = 0;
  _$jscoverage['core/Range.js'][2215] = 0;
  _$jscoverage['core/Range.js'][2216] = 0;
  _$jscoverage['core/Range.js'][2219] = 0;
  _$jscoverage['core/Range.js'][2220] = 0;
  _$jscoverage['core/Range.js'][2221] = 0;
  _$jscoverage['core/Range.js'][2222] = 0;
  _$jscoverage['core/Range.js'][2224] = 0;
}
_$jscoverage['core/Range.js'].source = ["<span class=\"c\">/**</span>","<span class=\"c\"> * Range&#23553;&#35013;</span>","<span class=\"c\"> * @file</span>","<span class=\"c\"> * @module UE.dom</span>","<span class=\"c\"> * @class Range</span>","<span class=\"c\"> * @since 1.2.6.1</span>","<span class=\"c\"> */</span>","","<span class=\"c\">/**</span>","<span class=\"c\"> * dom&#25805;&#20316;&#23553;&#35013;</span>","<span class=\"c\"> * @unfile</span>","<span class=\"c\"> * @module UE.dom</span>","<span class=\"c\"> */</span>","","<span class=\"c\">/**</span>","<span class=\"c\"> * Range&#23454;&#29616;&#31867;&#65292;&#26412;&#31867;&#26159;UEditor&#24213;&#23618;&#26680;&#24515;&#31867;&#65292;&#32479;&#19968;w3cRange&#21644;ieRange&#20043;&#38388;&#30340;&#24046;&#24322;&#65292;&#21253;&#25324;&#25509;&#21475;&#21644;&#23646;&#24615;</span>","<span class=\"c\"> * @unfile</span>","<span class=\"c\"> * @module UE.dom</span>","<span class=\"c\"> * @class Range</span>","<span class=\"c\"> */</span>","","<span class=\"k\">(</span><span class=\"k\">function</span> <span class=\"k\">()</span> <span class=\"k\">{</span>","    <span class=\"k\">var</span> guid <span class=\"k\">=</span> <span class=\"s\">0</span><span class=\"k\">,</span>","        fillChar <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>fillChar<span class=\"k\">,</span>","        fillData<span class=\"k\">;</span>","","    <span class=\"c\">/*</span>","<span class=\"c\">     * &#26356;&#26032;range&#30340;collapse&#29366;&#24577;</span>","<span class=\"c\">     * @param  {Range}   range    range&#23545;&#35937;</span>","<span class=\"c\">     */</span>","    <span class=\"k\">function</span> updateCollapse<span class=\"k\">(</span>range<span class=\"k\">)</span> <span class=\"k\">{</span>","        range<span class=\"k\">.</span>collapsed <span class=\"k\">=</span>","            range<span class=\"k\">.</span>startContainer <span class=\"k\">&amp;&amp;</span> range<span class=\"k\">.</span>endContainer <span class=\"k\">&amp;&amp;</span>","                range<span class=\"k\">.</span>startContainer <span class=\"k\">===</span> range<span class=\"k\">.</span>endContainer <span class=\"k\">&amp;&amp;</span>","                range<span class=\"k\">.</span>startOffset <span class=\"k\">==</span> range<span class=\"k\">.</span>endOffset<span class=\"k\">;</span>","    <span class=\"k\">}</span>","","    <span class=\"k\">function</span> selectOneNode<span class=\"k\">(</span>rng<span class=\"k\">)</span><span class=\"k\">{</span>","        <span class=\"k\">return</span> <span class=\"k\">!</span>rng<span class=\"k\">.</span>collapsed <span class=\"k\">&amp;&amp;</span> rng<span class=\"k\">.</span>startContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"k\">&amp;&amp;</span> rng<span class=\"k\">.</span>startContainer <span class=\"k\">===</span> rng<span class=\"k\">.</span>endContainer <span class=\"k\">&amp;&amp;</span> rng<span class=\"k\">.</span>endOffset <span class=\"k\">-</span> rng<span class=\"k\">.</span>startOffset <span class=\"k\">==</span> <span class=\"s\">1</span>","    <span class=\"k\">}</span>","    <span class=\"k\">function</span> setEndPoint<span class=\"k\">(</span>toStart<span class=\"k\">,</span> node<span class=\"k\">,</span> offset<span class=\"k\">,</span> range<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"c\">//&#22914;&#26524;node&#26159;&#33258;&#38381;&#21512;&#26631;&#31614;&#35201;&#22788;&#29702;</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">(</span>dtd<span class=\"k\">.</span>$empty<span class=\"k\">[</span>node<span class=\"k\">.</span>tagName<span class=\"k\">]</span> <span class=\"k\">||</span> dtd<span class=\"k\">.</span>$nonChild<span class=\"k\">[</span>node<span class=\"k\">.</span>tagName<span class=\"k\">]))</span> <span class=\"k\">{</span>","            offset <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNodeIndex<span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">+</span> <span class=\"k\">(</span>toStart <span class=\"k\">?</span> <span class=\"s\">0</span> <span class=\"k\">:</span> <span class=\"s\">1</span><span class=\"k\">);</span>","            node <span class=\"k\">=</span> node<span class=\"k\">.</span>parentNode<span class=\"k\">;</span>","        <span class=\"k\">}</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>toStart<span class=\"k\">)</span> <span class=\"k\">{</span>","            range<span class=\"k\">.</span>startContainer <span class=\"k\">=</span> node<span class=\"k\">;</span>","            range<span class=\"k\">.</span>startOffset <span class=\"k\">=</span> offset<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span>range<span class=\"k\">.</span>endContainer<span class=\"k\">)</span> <span class=\"k\">{</span>","                range<span class=\"k\">.</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","        <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","            range<span class=\"k\">.</span>endContainer <span class=\"k\">=</span> node<span class=\"k\">;</span>","            range<span class=\"k\">.</span>endOffset <span class=\"k\">=</span> offset<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span>range<span class=\"k\">.</span>startContainer<span class=\"k\">)</span> <span class=\"k\">{</span>","                range<span class=\"k\">.</span>collapse<span class=\"k\">(</span><span class=\"k\">false</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","        <span class=\"k\">}</span>","        updateCollapse<span class=\"k\">(</span>range<span class=\"k\">);</span>","        <span class=\"k\">return</span> range<span class=\"k\">;</span>","    <span class=\"k\">}</span>","","    <span class=\"k\">function</span> execContentsAction<span class=\"k\">(</span>range<span class=\"k\">,</span> action<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"c\">//&#35843;&#25972;&#36793;&#30028;</span>","        <span class=\"c\">//range.includeBookmark();</span>","        <span class=\"k\">var</span> start <span class=\"k\">=</span> range<span class=\"k\">.</span>startContainer<span class=\"k\">,</span>","            end <span class=\"k\">=</span> range<span class=\"k\">.</span>endContainer<span class=\"k\">,</span>","            startOffset <span class=\"k\">=</span> range<span class=\"k\">.</span>startOffset<span class=\"k\">,</span>","            endOffset <span class=\"k\">=</span> range<span class=\"k\">.</span>endOffset<span class=\"k\">,</span>","            doc <span class=\"k\">=</span> range<span class=\"k\">.</span>document<span class=\"k\">,</span>","            frag <span class=\"k\">=</span> doc<span class=\"k\">.</span>createDocumentFragment<span class=\"k\">(),</span>","            tmpStart<span class=\"k\">,</span> tmpEnd<span class=\"k\">;</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","            start <span class=\"k\">=</span> start<span class=\"k\">.</span>childNodes<span class=\"k\">[</span>startOffset<span class=\"k\">]</span> <span class=\"k\">||</span> <span class=\"k\">(</span>tmpStart <span class=\"k\">=</span> start<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>doc<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span><span class=\"s\">''</span><span class=\"k\">)));</span>","        <span class=\"k\">}</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>end<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","            end <span class=\"k\">=</span> end<span class=\"k\">.</span>childNodes<span class=\"k\">[</span>endOffset<span class=\"k\">]</span> <span class=\"k\">||</span> <span class=\"k\">(</span>tmpEnd <span class=\"k\">=</span> end<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>doc<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span><span class=\"s\">''</span><span class=\"k\">)));</span>","        <span class=\"k\">}</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>start <span class=\"k\">===</span> end <span class=\"k\">&amp;&amp;</span> start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span> <span class=\"k\">{</span>","            frag<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>doc<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span>start<span class=\"k\">.</span>substringData<span class=\"k\">(</span>startOffset<span class=\"k\">,</span> endOffset <span class=\"k\">-</span> startOffset<span class=\"k\">)));</span>","            <span class=\"c\">//is not clone</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>action<span class=\"k\">)</span> <span class=\"k\">{</span>","                start<span class=\"k\">.</span>deleteData<span class=\"k\">(</span>startOffset<span class=\"k\">,</span> endOffset <span class=\"k\">-</span> startOffset<span class=\"k\">);</span>","                range<span class=\"k\">.</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> frag<span class=\"k\">;</span>","        <span class=\"k\">}</span>","        <span class=\"k\">var</span> current<span class=\"k\">,</span> currentLevel<span class=\"k\">,</span> clone <span class=\"k\">=</span> frag<span class=\"k\">,</span>","            startParents <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>findParents<span class=\"k\">(</span>start<span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">),</span> endParents <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>findParents<span class=\"k\">(</span>end<span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">);</span>","        <span class=\"k\">for</span> <span class=\"k\">(</span><span class=\"k\">var</span> i <span class=\"k\">=</span> <span class=\"s\">0</span><span class=\"k\">;</span> startParents<span class=\"k\">[</span>i<span class=\"k\">]</span> <span class=\"k\">==</span> endParents<span class=\"k\">[</span>i<span class=\"k\">];)</span> <span class=\"k\">{</span>","            i<span class=\"k\">++;</span>","        <span class=\"k\">}</span>","        <span class=\"k\">for</span> <span class=\"k\">(</span><span class=\"k\">var</span> j <span class=\"k\">=</span> i<span class=\"k\">,</span> si<span class=\"k\">;</span> si <span class=\"k\">=</span> startParents<span class=\"k\">[</span>j<span class=\"k\">];</span> j<span class=\"k\">++)</span> <span class=\"k\">{</span>","            current <span class=\"k\">=</span> si<span class=\"k\">.</span>nextSibling<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>si <span class=\"k\">==</span> start<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(!</span>tmpStart<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>range<span class=\"k\">.</span>startContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                        clone<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>doc<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span>start<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>slice<span class=\"k\">(</span>startOffset<span class=\"k\">)));</span>","                        <span class=\"c\">//is not clone</span>","                        <span class=\"k\">if</span> <span class=\"k\">(</span>action<span class=\"k\">)</span> <span class=\"k\">{</span>","                            start<span class=\"k\">.</span>deleteData<span class=\"k\">(</span>startOffset<span class=\"k\">,</span> start<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length <span class=\"k\">-</span> startOffset<span class=\"k\">);</span>","                        <span class=\"k\">}</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                        clone<span class=\"k\">.</span>appendChild<span class=\"k\">(!</span>action <span class=\"k\">?</span> start<span class=\"k\">.</span>cloneNode<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">)</span> <span class=\"k\">:</span> start<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                currentLevel <span class=\"k\">=</span> si<span class=\"k\">.</span>cloneNode<span class=\"k\">(</span><span class=\"k\">false</span><span class=\"k\">);</span>","                clone<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>currentLevel<span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">while</span> <span class=\"k\">(</span>current<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>current <span class=\"k\">===</span> end <span class=\"k\">||</span> current <span class=\"k\">===</span> endParents<span class=\"k\">[</span>j<span class=\"k\">])</span> <span class=\"k\">{</span>","                    <span class=\"k\">break</span><span class=\"k\">;</span>","                <span class=\"k\">}</span>","                si <span class=\"k\">=</span> current<span class=\"k\">.</span>nextSibling<span class=\"k\">;</span>","                clone<span class=\"k\">.</span>appendChild<span class=\"k\">(!</span>action <span class=\"k\">?</span> current<span class=\"k\">.</span>cloneNode<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">)</span> <span class=\"k\">:</span> current<span class=\"k\">);</span>","                current <span class=\"k\">=</span> si<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            clone <span class=\"k\">=</span> currentLevel<span class=\"k\">;</span>","        <span class=\"k\">}</span>","        clone <span class=\"k\">=</span> frag<span class=\"k\">;</span>","        <span class=\"k\">if</span> <span class=\"k\">(!</span>startParents<span class=\"k\">[</span>i<span class=\"k\">])</span> <span class=\"k\">{</span>","            clone<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>startParents<span class=\"k\">[</span>i <span class=\"k\">-</span> <span class=\"s\">1</span><span class=\"k\">].</span>cloneNode<span class=\"k\">(</span><span class=\"k\">false</span><span class=\"k\">));</span>","            clone <span class=\"k\">=</span> clone<span class=\"k\">.</span>firstChild<span class=\"k\">;</span>","        <span class=\"k\">}</span>","        <span class=\"k\">for</span> <span class=\"k\">(</span><span class=\"k\">var</span> j <span class=\"k\">=</span> i<span class=\"k\">,</span> ei<span class=\"k\">;</span> ei <span class=\"k\">=</span> endParents<span class=\"k\">[</span>j<span class=\"k\">];</span> j<span class=\"k\">++)</span> <span class=\"k\">{</span>","            current <span class=\"k\">=</span> ei<span class=\"k\">.</span>previousSibling<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>ei <span class=\"k\">==</span> end<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(!</span>tmpEnd <span class=\"k\">&amp;&amp;</span> range<span class=\"k\">.</span>endContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    clone<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>doc<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span>end<span class=\"k\">.</span>substringData<span class=\"k\">(</span><span class=\"s\">0</span><span class=\"k\">,</span> endOffset<span class=\"k\">)));</span>","                    <span class=\"c\">//is not clone</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>action<span class=\"k\">)</span> <span class=\"k\">{</span>","                        end<span class=\"k\">.</span>deleteData<span class=\"k\">(</span><span class=\"s\">0</span><span class=\"k\">,</span> endOffset<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                currentLevel <span class=\"k\">=</span> ei<span class=\"k\">.</span>cloneNode<span class=\"k\">(</span><span class=\"k\">false</span><span class=\"k\">);</span>","                clone<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>currentLevel<span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"c\">//&#22914;&#26524;&#20004;&#31471;&#21516;&#32423;&#65292;&#21491;&#36793;&#31532;&#19968;&#27425;&#24050;&#32463;&#34987;&#24320;&#22987;&#20570;&#20102;</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>j <span class=\"k\">!=</span> i <span class=\"k\">||</span> <span class=\"k\">!</span>startParents<span class=\"k\">[</span>i<span class=\"k\">])</span> <span class=\"k\">{</span>","                <span class=\"k\">while</span> <span class=\"k\">(</span>current<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>current <span class=\"k\">===</span> start<span class=\"k\">)</span> <span class=\"k\">{</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    ei <span class=\"k\">=</span> current<span class=\"k\">.</span>previousSibling<span class=\"k\">;</span>","                    clone<span class=\"k\">.</span>insertBefore<span class=\"k\">(!</span>action <span class=\"k\">?</span> current<span class=\"k\">.</span>cloneNode<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">)</span> <span class=\"k\">:</span> current<span class=\"k\">,</span> clone<span class=\"k\">.</span>firstChild<span class=\"k\">);</span>","                    current <span class=\"k\">=</span> ei<span class=\"k\">;</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            clone <span class=\"k\">=</span> currentLevel<span class=\"k\">;</span>","        <span class=\"k\">}</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>action<span class=\"k\">)</span> <span class=\"k\">{</span>","            range<span class=\"k\">.</span>setStartBefore<span class=\"k\">(!</span>endParents<span class=\"k\">[</span>i<span class=\"k\">]</span> <span class=\"k\">?</span> endParents<span class=\"k\">[</span>i <span class=\"k\">-</span> <span class=\"s\">1</span><span class=\"k\">]</span> <span class=\"k\">:</span> <span class=\"k\">!</span>startParents<span class=\"k\">[</span>i<span class=\"k\">]</span> <span class=\"k\">?</span> startParents<span class=\"k\">[</span>i <span class=\"k\">-</span> <span class=\"s\">1</span><span class=\"k\">]</span> <span class=\"k\">:</span> endParents<span class=\"k\">[</span>i<span class=\"k\">]).</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","        <span class=\"k\">}</span>","        tmpStart <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>tmpStart<span class=\"k\">);</span>","        tmpEnd <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>tmpEnd<span class=\"k\">);</span>","        <span class=\"k\">return</span> frag<span class=\"k\">;</span>","    <span class=\"k\">}</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * &#21019;&#24314;&#19968;&#20010;&#36319;document&#32465;&#23450;&#30340;&#31354;&#30340;Range&#23454;&#20363;</span>","<span class=\"c\">     * @constructor</span>","<span class=\"c\">     */</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * @property { Node } startContainer &#24403;&#21069;Range&#30340;&#24320;&#22987;&#36793;&#30028;&#30340;&#23481;&#22120;&#33410;&#28857;, &#21487;&#20197;&#26159;&#19968;&#20010;&#20803;&#32032;&#33410;&#28857;&#25110;&#32773;&#26159;&#25991;&#26412;&#33410;&#28857;</span>","<span class=\"c\">     */</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * @property { Node } startOffset &#24403;&#21069;Range&#30340;&#24320;&#22987;&#36793;&#30028;&#23481;&#22120;&#33410;&#28857;&#30340;&#20559;&#31227;&#37327;, &#22914;&#26524;&#26159;&#20803;&#32032;&#33410;&#28857;&#65292;</span>","<span class=\"c\">     *                              &#35813;&#20540;&#23601;&#26159;childNodes&#20013;&#30340;&#31532;&#20960;&#20010;&#33410;&#28857;&#65292; &#22914;&#26524;&#26159;&#25991;&#26412;&#33410;&#28857;&#23601;&#26159;&#25991;&#26412;&#20869;&#23481;&#30340;&#31532;&#20960;&#20010;&#23383;&#31526;</span>","<span class=\"c\">     */</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * @property { Node } endContainer &#24403;&#21069;Range&#30340;&#32467;&#26463;&#36793;&#30028;&#30340;&#23481;&#22120;&#33410;&#28857;, &#21487;&#20197;&#26159;&#19968;&#20010;&#20803;&#32032;&#33410;&#28857;&#25110;&#32773;&#26159;&#25991;&#26412;&#33410;&#28857;</span>","<span class=\"c\">     */</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * @property { Node } endOffset &#24403;&#21069;Range&#30340;&#32467;&#26463;&#36793;&#30028;&#23481;&#22120;&#33410;&#28857;&#30340;&#20559;&#31227;&#37327;, &#22914;&#26524;&#26159;&#20803;&#32032;&#33410;&#28857;&#65292;</span>","<span class=\"c\">     *                              &#35813;&#20540;&#23601;&#26159;childNodes&#20013;&#30340;&#31532;&#20960;&#20010;&#33410;&#28857;&#65292; &#22914;&#26524;&#26159;&#25991;&#26412;&#33410;&#28857;&#23601;&#26159;&#25991;&#26412;&#20869;&#23481;&#30340;&#31532;&#20960;&#20010;&#23383;&#31526;</span>","<span class=\"c\">     */</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * @property { Boolean } collapsed &#24403;&#21069;Range&#26159;&#21542;&#26159;&#38381;&#21512;&#30340;</span>","<span class=\"c\">     */</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * @property { Document } document &#24403;&#21069;Range&#25152;&#23646;&#30340;Document&#23545;&#35937;</span>","<span class=\"c\">     */</span>","","    <span class=\"k\">var</span> Range <span class=\"k\">=</span> dom<span class=\"k\">.</span>Range <span class=\"k\">=</span> <span class=\"k\">function</span> <span class=\"k\">(</span>document<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">var</span> me <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        me<span class=\"k\">.</span>startContainer <span class=\"k\">=</span>","            me<span class=\"k\">.</span>startOffset <span class=\"k\">=</span>","                me<span class=\"k\">.</span>endContainer <span class=\"k\">=</span>","                    me<span class=\"k\">.</span>endOffset <span class=\"k\">=</span> <span class=\"k\">null</span><span class=\"k\">;</span>","        me<span class=\"k\">.</span>document <span class=\"k\">=</span> document<span class=\"k\">;</span>","        me<span class=\"k\">.</span>collapsed <span class=\"k\">=</span> <span class=\"k\">true</span><span class=\"k\">;</span>","    <span class=\"k\">}</span><span class=\"k\">;</span>","","    <span class=\"c\">/*</span>","<span class=\"c\">     * &#21024;&#38500;fillData</span>","<span class=\"c\">     * @param doc</span>","<span class=\"c\">     * @param excludeNode</span>","<span class=\"c\">     */</span>","    <span class=\"k\">function</span> removeFillData<span class=\"k\">(</span>doc<span class=\"k\">,</span> excludeNode<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">try</span> <span class=\"k\">{</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>fillData <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>inDoc<span class=\"k\">(</span>fillData<span class=\"k\">,</span> doc<span class=\"k\">))</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(!</span>fillData<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>replace<span class=\"k\">(</span>fillCharReg<span class=\"k\">,</span> <span class=\"s\">''</span><span class=\"k\">).</span>length<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">var</span> tmpNode <span class=\"k\">=</span> fillData<span class=\"k\">.</span>parentNode<span class=\"k\">;</span>","                    domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>fillData<span class=\"k\">);</span>","                    <span class=\"k\">while</span> <span class=\"k\">(</span>tmpNode <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>isEmptyInlineElement<span class=\"k\">(</span>tmpNode<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span>","                        <span class=\"c\">//safari&#30340;contains&#26377;bug</span>","                        <span class=\"k\">(</span>browser<span class=\"k\">.</span>safari <span class=\"k\">?</span> <span class=\"k\">!(</span>domUtils<span class=\"k\">.</span>getPosition<span class=\"k\">(</span>tmpNode<span class=\"k\">,</span>excludeNode<span class=\"k\">)</span> <span class=\"k\">&amp;</span> domUtils<span class=\"k\">.</span>POSITION_CONTAINS<span class=\"k\">)</span> <span class=\"k\">:</span> <span class=\"k\">!</span>tmpNode<span class=\"k\">.</span>contains<span class=\"k\">(</span>excludeNode<span class=\"k\">))</span>","                        <span class=\"k\">)</span> <span class=\"k\">{</span>","                        fillData <span class=\"k\">=</span> tmpNode<span class=\"k\">.</span>parentNode<span class=\"k\">;</span>","                        domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>tmpNode<span class=\"k\">);</span>","                        tmpNode <span class=\"k\">=</span> fillData<span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                    fillData<span class=\"k\">.</span>nodeValue <span class=\"k\">=</span> fillData<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>replace<span class=\"k\">(</span>fillCharReg<span class=\"k\">,</span> <span class=\"s\">''</span><span class=\"k\">);</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","        <span class=\"k\">}</span> <span class=\"k\">catch</span> <span class=\"k\">(</span>e<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">}</span>","    <span class=\"k\">}</span>","","    <span class=\"c\">/*</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @param node</span>","<span class=\"c\">     * @param dir</span>","<span class=\"c\">     */</span>","    <span class=\"k\">function</span> mergeSibling<span class=\"k\">(</span>node<span class=\"k\">,</span> dir<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">var</span> tmpNode<span class=\"k\">;</span>","        node <span class=\"k\">=</span> node<span class=\"k\">[</span>dir<span class=\"k\">];</span>","        <span class=\"k\">while</span> <span class=\"k\">(</span>node <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>isFillChar<span class=\"k\">(</span>node<span class=\"k\">))</span> <span class=\"k\">{</span>","            tmpNode <span class=\"k\">=</span> node<span class=\"k\">[</span>dir<span class=\"k\">];</span>","            domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>node<span class=\"k\">);</span>","            node <span class=\"k\">=</span> tmpNode<span class=\"k\">;</span>","        <span class=\"k\">}</span>","    <span class=\"k\">}</span>","","    Range<span class=\"k\">.</span>prototype <span class=\"k\">=</span> <span class=\"k\">{</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#20811;&#38534;&#36873;&#20013;&#30340;&#20869;&#23481;&#21040;&#19968;&#20010;DocumentFragment&#37324;</span>","<span class=\"c\">         * @method cloneContents</span>","<span class=\"c\">         * @return { DocumentFragment | NULL } &#22914;&#26524;&#36873;&#21306;&#26159;&#31354;&#30340;&#23558;&#36820;&#22238;null&#65292; &#21542;&#21017;&#65292; &#36820;&#22238;&#21253;&#21547;&#25152;clone&#20869;&#23481;&#30340;DocumentFragment&#20803;&#32032;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;!-- &#34987;&#36873;&#20013;&#30340;&#20869;&#23481; --&gt;</span>","<span class=\"c\">         * &lt;div&gt;123&lt;/div&gt;&lt;div&gt;456&lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *     //output: 2</span>","<span class=\"c\">         *     console.log( range.cloneContents().childNodes.length );</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        cloneContents<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">()</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>collapsed <span class=\"k\">?</span> <span class=\"k\">null</span> <span class=\"k\">:</span> execContentsAction<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">,</span> <span class=\"s\">0</span><span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#21024;&#38500;&#24403;&#21069;&#36873;&#21306;&#33539;&#22260;&#20013;&#30340;&#25152;&#26377;&#20869;&#23481;</span>","<span class=\"c\">         * @method deleteContents</span>","<span class=\"c\">         * @remind &#25191;&#34892;&#23436;&#35813;&#25805;&#20316;&#21518;&#65292; &#24403;&#21069;Range&#23545;&#35937;&#21464;&#25104;&#20102;&#38381;&#21512;&#29366;&#24577;</span>","<span class=\"c\">         * @remind &#25191;&#34892;&#35813;&#25805;&#20316;&#20250;&#24341;&#36215;&#24403;&#21069;Range&#23545;&#35937;&#30340;&#20854;&#20182;&#23646;&#24615;&#30340;&#21464;&#21270;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;&#25805;&#20316;&#30340;Range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;div&gt;&lt;/div&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *     //output: 5</span>","<span class=\"c\">         *     console.log( document.body.childNodes.length );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //&#25191;&#34892;&#21024;&#38500;&#36873;&#21306;&#20869;&#23481;&#25805;&#20316;</span>","<span class=\"c\">         *     range.deleteContents();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: 2</span>","<span class=\"c\">         *     console.log( document.body.childNodes.length );</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        deleteContents<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">()</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> txt<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                execContentsAction<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">,</span> <span class=\"s\">1</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>browser<span class=\"k\">.</span>webkit<span class=\"k\">)</span> <span class=\"k\">{</span>","                txt <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">;</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>txt<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span>txt<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>txt<span class=\"k\">).</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","                    domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>txt<span class=\"k\">);</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#23558;&#24403;&#21069;&#36873;&#21306;&#30340;&#20869;&#23481;&#25552;&#21462;&#21040;&#19968;&#20010;DocumentFragment&#37324;</span>","<span class=\"c\">         * @method extractContents</span>","<span class=\"c\">         * @remind &#25191;&#34892;&#35813;&#25805;&#20316;&#21518;&#65292; &#36873;&#21306;&#23558;&#21464;&#25104;&#38381;&#21512;&#29366;&#24577;</span>","<span class=\"c\">         * @warning &#25191;&#34892;&#35813;&#25805;&#20316;&#21518;&#65292; &#21407;&#26469;&#36873;&#21306;&#25152;&#36873;&#20013;&#30340;&#20869;&#23481;&#23558;&#20174;dom&#26641;&#19978;&#21093;&#31163;&#20986;&#26469;</span>","<span class=\"c\">         * @return { DocumentFragment } &#36820;&#22238;&#21253;&#21547;&#25152;&#25552;&#21462;&#20869;&#23481;&#30340;DocumentFragment&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;div&gt;&lt;/div&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *     //output: 5</span>","<span class=\"c\">         *     console.log( document.body.childNodes.length );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //&#25191;&#34892;&#36873;&#21306;&#20869;&#23481;&#25552;&#21462;</span>","<span class=\"c\">         *     var contents = range.extractContents();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: 2</span>","<span class=\"c\">         *     console.log( document.body.childNodes.length );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: 3</span>","<span class=\"c\">         *     console.log( contents.childNodes.length );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         */</span>","        extractContents<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">()</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>collapsed <span class=\"k\">?</span> <span class=\"k\">null</span> <span class=\"k\">:</span> execContentsAction<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">,</span> <span class=\"s\">2</span><span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35774;&#32622;Range&#30340;&#24320;&#22987;&#20301;&#32622;</span>","<span class=\"c\">         * @method  setStart</span>","<span class=\"c\">         * @remind &#22914;&#26524;&#23481;&#22120;&#33410;&#28857;&#26159;&#20803;&#32032;&#33410;&#28857;&#65292;&#37027;&#20040;offset&#25351;&#30340;&#26159;&#20854;&#23376;&#20803;&#32032;&#20013;&#32034;&#24341;&#20026;offset&#30340;&#20803;&#32032;&#65292;</span>","<span class=\"c\">         *          &#22914;&#26524;&#26159;&#25991;&#26412;&#33410;&#28857;&#65292;&#37027;&#20040;offset&#25351;&#30340;&#26159;&#20854;&#25991;&#26412;&#20869;&#23481;&#30340;&#31532;offset&#20010;&#23383;&#31526;</span>","<span class=\"c\">         * @param { Node } node &#23558;&#34987;&#35774;&#20026;&#24403;&#21069;&#36873;&#21306;&#24320;&#22987;&#36793;&#30028;&#23481;&#22120;&#30340;&#33410;&#28857;&#23545;&#35937;</span>","<span class=\"c\">         * @param { int } offset &#24320;&#22987;&#23481;&#22120;&#30340;&#20559;&#31227;&#37327;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;&lt;/div&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: SPAN</span>","<span class=\"c\">         *     console.log( range.startContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     range.setStart( document.getElementById( \"test\" ), 0 );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: DIV</span>","<span class=\"c\">         *     console.log( range.startContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setStart<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">,</span> offset<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> setEndPoint<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">,</span> node<span class=\"k\">,</span> offset<span class=\"k\">,</span> <span class=\"k\">this</span><span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35774;&#32622;Range&#30340;&#32467;&#26463;&#20301;&#32622;</span>","<span class=\"c\">         * @method  setEnd</span>","<span class=\"c\">         * @param { Node } node &#23558;&#34987;&#35774;&#20026;&#24403;&#21069;&#36873;&#21306;&#32467;&#26463;&#36793;&#30028;&#23481;&#22120;&#30340;&#33410;&#28857;&#23545;&#35937;</span>","<span class=\"c\">         * @param { int } offset &#32467;&#26463;&#23481;&#22120;&#30340;&#20559;&#31227;&#37327;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;&lt;/div&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: A</span>","<span class=\"c\">         *     console.log( range.endContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     range.setEnd( document.getElementById( \"test\" ), 0 );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: DIV</span>","<span class=\"c\">         *     console.log( range.endContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setEnd<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">,</span> offset<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> setEndPoint<span class=\"k\">(</span><span class=\"k\">false</span><span class=\"k\">,</span> node<span class=\"k\">,</span> offset<span class=\"k\">,</span> <span class=\"k\">this</span><span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#23558;Range&#24320;&#22987;&#20301;&#32622;&#35774;&#32622;&#21040;node&#33410;&#28857;&#20043;&#21518;</span>","<span class=\"c\">         * @method  setStartAfter</span>","<span class=\"c\">         * @param { Node } node &#24403;&#21069;&#36873;&#21306;&#24320;&#22987;&#36793;&#30028;&#20043;&#21069;&#30340;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;&lt;/div&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: A</span>","<span class=\"c\">         *     console.log( range.startContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     range.setStartAfter( document.getElementById( \"test\" ) );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: SPAN</span>","<span class=\"c\">         *     console.log( range.startContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setStartAfter<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setStart<span class=\"k\">(</span>node<span class=\"k\">.</span>parentNode<span class=\"k\">,</span> domUtils<span class=\"k\">.</span>getNodeIndex<span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">+</span> <span class=\"s\">1</span><span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#23558;Range&#24320;&#22987;&#20301;&#32622;&#35774;&#32622;&#21040;node&#33410;&#28857;&#20043;&#21069;</span>","<span class=\"c\">         * @method  setStartBefore</span>","<span class=\"c\">         * @param { Node } node &#26032;&#30340;&#36873;&#21306;&#24320;&#22987;&#20301;&#32622;&#22312;&#35813;&#33410;&#28857;&#20043;&#21069;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;&lt;/div&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: A</span>","<span class=\"c\">         *     console.log( range.startContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     range.setStartBefore( document.getElementById( \"test\" ) );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: SPAN</span>","<span class=\"c\">         *     console.log( range.startContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setStartBefore<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setStart<span class=\"k\">(</span>node<span class=\"k\">.</span>parentNode<span class=\"k\">,</span> domUtils<span class=\"k\">.</span>getNodeIndex<span class=\"k\">(</span>node<span class=\"k\">));</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#23558;Range&#32467;&#26463;&#20301;&#32622;&#35774;&#32622;&#21040;node&#33410;&#28857;&#20043;&#21518;</span>","<span class=\"c\">         * @method  setEndAfter</span>","<span class=\"c\">         * @param { Node } node &#30446;&#26631;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;&lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *         //output: A</span>","<span class=\"c\">         *         console.log( range.endContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.setEndAfter( document.getElementById( \"test\" ) );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: DIV</span>","<span class=\"c\">         *         console.log( range.endContainer.tagName );</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setEndAfter<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setEnd<span class=\"k\">(</span>node<span class=\"k\">.</span>parentNode<span class=\"k\">,</span> domUtils<span class=\"k\">.</span>getNodeIndex<span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">+</span> <span class=\"s\">1</span><span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#23558;Range&#32467;&#26463;&#20301;&#32622;&#35774;&#32622;&#21040;node&#33410;&#28857;&#20043;&#21069;</span>","<span class=\"c\">         * @method  setEndBefore</span>","<span class=\"c\">         * @param { Node } node &#30446;&#26631;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;&lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *         //output: A</span>","<span class=\"c\">         *         console.log( range.endContainer.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.setEndBefore( document.getElementById( \"test\" ) );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: SPAN</span>","<span class=\"c\">         *         console.log( range.endContainer.tagName );</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setEndBefore<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setEnd<span class=\"k\">(</span>node<span class=\"k\">.</span>parentNode<span class=\"k\">,</span> domUtils<span class=\"k\">.</span>getNodeIndex<span class=\"k\">(</span>node<span class=\"k\">));</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35774;&#32622;Range&#30340;&#24320;&#22987;&#20301;&#32622;&#35774;&#32622;&#21040;node&#33410;&#28857;&#20869;&#30340;&#31532;&#19968;&#20010;&#33410;&#28857;&#22788;</span>","<span class=\"c\">         * @method  setStartAtFirst</span>","<span class=\"c\">         * @param { Node } node &#30446;&#26631;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.setStartAtFirst( document.getElementById(\"test\") );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;i&gt;&lt;/i&gt;&lt;a&gt;&lt;/a&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setStartAtFirst<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setStart<span class=\"k\">(</span>node<span class=\"k\">,</span> <span class=\"s\">0</span><span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35774;&#32622;Range&#30340;&#24320;&#22987;&#20301;&#32622;&#35774;&#32622;&#21040;node&#33410;&#28857;&#20869;&#30340;&#26368;&#21518;&#19968;&#20010;&#33410;&#28857;&#22788;</span>","<span class=\"c\">         * @method  setStartAtLast</span>","<span class=\"c\">         * @param { Node } node &#30446;&#26631;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *         //output: &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.setStartAtLast( document.body );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //&#36873;&#21306;&#24050;&#32463;&#38381;&#21512;&#65292; &#36755;&#20986;&#31354;&#23383;&#31526;&#20018;</span>","<span class=\"c\">         *         //output: ''</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setStartAtLast<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setStart<span class=\"k\">(</span>node<span class=\"k\">,</span> node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">?</span> node<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length <span class=\"k\">:</span> node<span class=\"k\">.</span>childNodes<span class=\"k\">.</span>length<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35774;&#32622;Range&#30340;&#32467;&#26463;&#20301;&#32622;&#35774;&#32622;&#21040;node&#33410;&#28857;&#20869;&#30340;&#31532;&#19968;&#20010;&#33410;&#28857;&#22788;</span>","<span class=\"c\">         * @method  setEndAtFirst</span>","<span class=\"c\">         * @param { Node } node &#30446;&#26631;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;&lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.setEndAtFirst( document.getElementById(\"test\") );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;&lt;div&gt;&lt;/div&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setEndAtFirst<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setEnd<span class=\"k\">(</span>node<span class=\"k\">,</span> <span class=\"s\">0</span><span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35774;&#32622;Range&#30340;&#32467;&#26463;&#20301;&#32622;&#35774;&#32622;&#21040;node&#33410;&#28857;&#20869;&#30340;&#26368;&#21518;&#19968;&#20010;&#33410;&#28857;&#22788;</span>","<span class=\"c\">         * @method  setEndAtLast</span>","<span class=\"c\">         * @param { Node } node &#30446;&#26631;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:setStart(Node,int)</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.setEndAtLast( document.getElementById(\"test\") );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;&lt;span&gt;&lt;/span&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        setEndAtLast<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setEnd<span class=\"k\">(</span>node<span class=\"k\">,</span> node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">?</span> node<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length <span class=\"k\">:</span> node<span class=\"k\">.</span>childNodes<span class=\"k\">.</span>length<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#36873;&#20013;&#19968;&#20010;&#33410;&#28857;&#65292; &#24182;&#36820;&#22238;&#21253;&#21547;&#36825;&#20010;&#33410;&#28857;&#30340;range&#23545;&#35937;</span>","<span class=\"c\">         * @method  selectNode</span>","<span class=\"c\">         * @param { Node } node &#38656;&#35201;&#36873;&#20013;&#30340;&#33410;&#28857;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;&#65292; &#20294;&#26159;&#36873;&#21306;&#24050;&#32463;&#25913;&#21464;&#65292; &#21253;&#21547;&#20102;&#24403;&#21069;&#36873;&#25321;&#30340;&#33410;&#28857;&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;&lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.selectNode( document.getElementById(\"test\") );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;div id=\"test\"&gt;&lt;/div&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        selectNode<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>node<span class=\"k\">).</span>setEndAfter<span class=\"k\">(</span>node<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#36873;&#20013;&#32473;&#23450;&#33410;&#28857;&#20869;&#37096;&#30340;&#25152;&#26377;&#33410;&#28857;&#65292; &#24182;&#36820;&#22238;&#21253;&#21547;&#36825;&#20010;&#33410;&#28857;&#20869;&#23481;&#30340;range&#23545;&#35937;</span>","<span class=\"c\">         * @method  selectNodeContents</span>","<span class=\"c\">         * @param { Node } node &#30446;&#26631;&#33410;&#28857;&#65292; &#24403;&#21069;range&#23558;&#21253;&#21547;&#35813;&#33410;&#28857;&#20869;&#30340;&#25152;&#26377;&#33410;&#28857;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;&#65292;  &#21253;&#21547;&#20102;&#24403;&#21069;&#36873;&#25321;&#30340;&#33410;&#28857;&#23545;&#35937;&#30340;&#25152;&#26377;&#23376;&#33410;&#28857;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *          &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *          &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.selectNodeContents( document.getElementById(\"test\") );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;&lt;i&gt;&lt;/i&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        selectNodeContents<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setStart<span class=\"k\">(</span>node<span class=\"k\">,</span> <span class=\"s\">0</span><span class=\"k\">).</span>setEndAtLast<span class=\"k\">(</span>node<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * clone&#24403;&#21069;Range&#23545;&#35937;</span>","<span class=\"c\">         * @method  cloneRange</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;&#30340;&#19968;&#20010;&#21103;&#26412;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         var cloneRange = range.cloneRange();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;&lt;i&gt;&lt;/i&gt;'</span>","<span class=\"c\">         *         console.log( cloneRange.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        cloneRange<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">()</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> me <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">;</span>","            <span class=\"k\">return</span> <span class=\"k\">new</span> Range<span class=\"k\">(</span>me<span class=\"k\">.</span>document<span class=\"k\">).</span>setStart<span class=\"k\">(</span>me<span class=\"k\">.</span>startContainer<span class=\"k\">,</span> me<span class=\"k\">.</span>startOffset<span class=\"k\">).</span>setEnd<span class=\"k\">(</span>me<span class=\"k\">.</span>endContainer<span class=\"k\">,</span> me<span class=\"k\">.</span>endOffset<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#38381;&#21512;&#24403;&#21069;&#36873;&#21306;&#65292;&#21521;&#23614;&#37096;&#38381;&#21512;</span>","<span class=\"c\">         * @method  collapse</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;&lt;i&gt;&lt;/i&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.startOffset );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.collapse();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: ''</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startOffset );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#38381;&#21512;&#24403;&#21069;&#36873;&#21306;&#65292;&#26681;&#25454;&#32473;&#23450;&#30340;toStart&#21442;&#25968;&#39033;&#20915;&#23450;&#26159;&#21521;&#23614;&#37096;&#38381;&#21512;&#36824;&#26159;&#21521;&#21069;&#38381;&#21512;&#65292;</span>","<span class=\"c\">         * &#22914;&#26524;toStart&#30340;&#20540;&#20026;true&#65292;&#21017;&#38381;&#21512;&#21040;&#39318;&#37096;&#65292; &#21453;&#20043;&#65292;&#21017;&#38381;&#21512;&#21040;&#23614;&#37096;</span>","<span class=\"c\">         * @method  collapse</span>","<span class=\"c\">         * @param { Boolean } toStart &#26159;&#21542;&#21521;&#21069;&#38381;&#21512;&#36873;&#21306;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;&lt;i&gt;&lt;/i&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.startOffset );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.collapse();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: ''</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startOffset );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        collapse<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>toStart<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> me <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>toStart<span class=\"k\">)</span> <span class=\"k\">{</span>","                me<span class=\"k\">.</span>endContainer <span class=\"k\">=</span> me<span class=\"k\">.</span>startContainer<span class=\"k\">;</span>","                me<span class=\"k\">.</span>endOffset <span class=\"k\">=</span> me<span class=\"k\">.</span>startOffset<span class=\"k\">;</span>","            <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                me<span class=\"k\">.</span>startContainer <span class=\"k\">=</span> me<span class=\"k\">.</span>endContainer<span class=\"k\">;</span>","                me<span class=\"k\">.</span>startOffset <span class=\"k\">=</span> me<span class=\"k\">.</span>endOffset<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            me<span class=\"k\">.</span>collapsed <span class=\"k\">=</span> <span class=\"k\">true</span><span class=\"k\">;</span>","            <span class=\"k\">return</span> me<span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/*</span>","<span class=\"c\">         * &#35843;&#25972;range&#30340;&#36793;&#30028;&#65292;&#20351;&#20854;\"&#25910;&#32553;\"&#21040;&#26368;&#23567;&#30340;&#20301;&#32622;</span>","<span class=\"c\">         * @name  shrinkBoundary</span>","<span class=\"c\">         * @grammar range.shrinkBoundary()  =&gt; Range  //range&#24320;&#22987;&#20301;&#32622;&#21644;&#32467;&#26463;&#20301;&#32622;&#37117;&#35843;&#25972;&#65292;&#21442;&#35265;&lt;code&gt;&lt;a href=\"#adjustmentboundary\"&gt;adjustmentBoundary&lt;/a&gt;&lt;/code&gt;</span>","<span class=\"c\">         * @grammar range.shrinkBoundary(true)  =&gt; Range  //&#20165;&#35843;&#25972;&#24320;&#22987;&#20301;&#32622;&#65292;&#24573;&#30053;&#32467;&#26463;&#20301;&#32622;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * &lt;b&gt;xx[&lt;/b&gt;xxxxx] ==&gt; &lt;b&gt;xx&lt;/b&gt;[xxxxx]</span>","<span class=\"c\">         * &lt;b&gt;x[xx&lt;/b&gt;&lt;i&gt;]xxx&lt;/i&gt; ==&gt; &lt;b&gt;x[xx]&lt;/b&gt;&lt;i&gt;xxx&lt;/i&gt;</span>","<span class=\"c\">         * [&lt;b&gt;&lt;i&gt;xxxx&lt;/i&gt;xxxxxxx&lt;/b&gt;] ==&gt; &lt;b&gt;&lt;i&gt;[xxxx&lt;/i&gt;xxxxxxx]&lt;/b&gt;</span>","<span class=\"c\">         */</span>","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35843;&#25972;range&#30340;&#24320;&#22987;&#20301;&#32622;&#21644;&#32467;&#26463;&#20301;&#32622;&#65292;&#20351;&#20854;\"&#25910;&#32553;\"&#21040;&#26368;&#23567;&#30340;&#20301;&#32622;</span>","<span class=\"c\">         * @method  shrinkBoundary</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: '&lt;a&gt;&lt;/a&gt;&lt;i&gt;&lt;/i&gt;'</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.startOffset );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.collapse();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: ''</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startOffset );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        shrinkBoundary<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>ignoreEnd<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> me <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">,</span> child<span class=\"k\">,</span>","                collapsed <span class=\"k\">=</span> me<span class=\"k\">.</span>collapsed<span class=\"k\">;</span>","            <span class=\"k\">function</span> check<span class=\"k\">(</span>node<span class=\"k\">)</span><span class=\"k\">{</span>","                <span class=\"k\">return</span> node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span>domUtils<span class=\"k\">.</span>isBookmarkNode<span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span>dtd<span class=\"k\">.</span>$empty<span class=\"k\">[</span>node<span class=\"k\">.</span>tagName<span class=\"k\">]</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span>dtd<span class=\"k\">.</span>$nonChild<span class=\"k\">[</span>node<span class=\"k\">.</span>tagName<span class=\"k\">]</span>","            <span class=\"k\">}</span>","            <span class=\"k\">while</span> <span class=\"k\">(</span>me<span class=\"k\">.</span>startContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"c\">//&#26159;element</span>","                <span class=\"k\">&amp;&amp;</span> <span class=\"k\">(</span>child <span class=\"k\">=</span> me<span class=\"k\">.</span>startContainer<span class=\"k\">.</span>childNodes<span class=\"k\">[</span>me<span class=\"k\">.</span>startOffset<span class=\"k\">])</span> <span class=\"c\">//&#23376;&#33410;&#28857;&#20063;&#26159;element</span>","                <span class=\"k\">&amp;&amp;</span> check<span class=\"k\">(</span>child<span class=\"k\">))</span> <span class=\"k\">{</span>","                me<span class=\"k\">.</span>setStart<span class=\"k\">(</span>child<span class=\"k\">,</span> <span class=\"s\">0</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">return</span> me<span class=\"k\">.</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span>ignoreEnd<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">while</span> <span class=\"k\">(</span>me<span class=\"k\">.</span>endContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"c\">//&#26159;element</span>","                    <span class=\"k\">&amp;&amp;</span> me<span class=\"k\">.</span>endOffset <span class=\"k\">&gt;</span> <span class=\"s\">0</span> <span class=\"c\">//&#22914;&#26524;&#26159;&#31354;&#20803;&#32032;&#23601;&#36864;&#20986; endOffset=0&#37027;&#20040;endOffst-1&#20026;&#36127;&#20540;&#65292;childNodes[endOffset]&#25253;&#38169;</span>","                    <span class=\"k\">&amp;&amp;</span> <span class=\"k\">(</span>child <span class=\"k\">=</span> me<span class=\"k\">.</span>endContainer<span class=\"k\">.</span>childNodes<span class=\"k\">[</span>me<span class=\"k\">.</span>endOffset <span class=\"k\">-</span> <span class=\"s\">1</span><span class=\"k\">])</span> <span class=\"c\">//&#23376;&#33410;&#28857;&#20063;&#26159;element</span>","                    <span class=\"k\">&amp;&amp;</span> check<span class=\"k\">(</span>child<span class=\"k\">))</span> <span class=\"k\">{</span>","                    me<span class=\"k\">.</span>setEnd<span class=\"k\">(</span>child<span class=\"k\">,</span> child<span class=\"k\">.</span>childNodes<span class=\"k\">.</span>length<span class=\"k\">);</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> me<span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#33719;&#21462;&#24403;&#21069;&#36873;&#21306;&#25152;&#21253;&#21547;&#30340;&#25152;&#26377;&#33410;&#28857;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;&#65292;</span>","<span class=\"c\">         * &#36820;&#22238;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;&#19968;&#23450;&#19981;&#26159;range&#33258;&#36523;&#30340;&#23481;&#22120;&#33410;&#28857;&#65292; &#20294;&#26377;&#21487;&#33021;&#26159;&#19968;&#20010;&#25991;&#26412;&#33410;&#28857;</span>","<span class=\"c\">         * @method  getCommonAncestor</span>","<span class=\"c\">         * @return { Node } &#24403;&#21069;range&#23545;&#35937;&#20869;&#25152;&#26377;&#33410;&#28857;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         var ancestorNode = range.getCommonAncestor();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 'DIV'</span>","<span class=\"c\">         *         console.log( ancestorNode.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *          &lt;span&gt;</span>","<span class=\"c\">         *              &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *              &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *          &lt;/span&gt;</span>","<span class=\"c\">         *          &lt;span&gt;</span>","<span class=\"c\">         *              &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *              &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *          &lt;/span&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         var ancestorNode = range.getCommonAncestor();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 'DIV'</span>","<span class=\"c\">         *         console.log( ancestorNode.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#33719;&#21462;&#24403;&#21069;&#36873;&#21306;&#25152;&#21253;&#21547;&#30340;&#25152;&#26377;&#33410;&#28857;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;&#65292; &#21487;&#20197;&#26681;&#25454;&#32473;&#23450;&#30340;&#21442;&#25968; includeSelf &#20915;&#23450;&#33719;&#21462;&#21040;</span>","<span class=\"c\">         * &#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;&#26159;&#21542;&#21487;&#20197;&#26159;&#24403;&#21069;&#36873;&#21306;&#30340;startContainer&#25110;endContainer&#33410;&#28857;&#65292; &#22914;&#26524; includeSelf</span>","<span class=\"c\">         * &#30340;&#21462;&#20540;&#20026;true&#65292; &#21017;&#36820;&#22238;&#30340;&#33410;&#28857;&#21487;&#20197;&#26159;&#33258;&#36523;&#30340;&#23481;&#22120;&#33410;&#28857;&#65292; &#21542;&#21017;&#65292; &#21017;&#19981;&#33021;&#26159;&#23481;&#22120;&#33410;&#28857;</span>","<span class=\"c\">         * @method  getCommonAncestor</span>","<span class=\"c\">         * @param { Boolean } includeSelf &#26159;&#21542;&#20801;&#35768;&#33719;&#21462;&#21040;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;&#26159;&#24403;&#21069;range&#23545;&#35937;&#30340;&#23481;&#22120;&#33410;&#28857;</span>","<span class=\"c\">         * @return { Node } &#24403;&#21069;range&#23545;&#35937;&#20869;&#25152;&#26377;&#33410;&#28857;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:getCommonAncestor()</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         var ancestorNode = range.getCommonAncestor( true );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 'DIV'</span>","<span class=\"c\">         *         console.log( ancestorNode.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         ancestorNode = range.getCommonAncestor( false );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: BODY</span>","<span class=\"c\">         *         console.log( ancestorNode.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#33719;&#21462;&#24403;&#21069;&#36873;&#21306;&#25152;&#21253;&#21547;&#30340;&#25152;&#26377;&#33410;&#28857;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;&#65292; &#21487;&#20197;&#26681;&#25454;&#32473;&#23450;&#30340;&#21442;&#25968; includeSelf &#20915;&#23450;&#33719;&#21462;&#21040;</span>","<span class=\"c\">         * &#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;&#26159;&#21542;&#21487;&#20197;&#26159;&#24403;&#21069;&#36873;&#21306;&#30340;startContainer&#25110;endContainer&#33410;&#28857;&#65292; &#22914;&#26524; includeSelf</span>","<span class=\"c\">         * &#30340;&#21462;&#20540;&#20026;true&#65292; &#21017;&#36820;&#22238;&#30340;&#33410;&#28857;&#21487;&#20197;&#26159;&#33258;&#36523;&#30340;&#23481;&#22120;&#33410;&#28857;&#65292; &#21542;&#21017;&#65292; &#21017;&#19981;&#33021;&#26159;&#23481;&#22120;&#33410;&#28857;&#65307; &#21516;&#26102;&#21487;&#20197;&#26681;&#25454;</span>","<span class=\"c\">         * ignoreTextNode &#21442;&#25968;&#30340;&#21462;&#20540;&#20915;&#23450;&#26159;&#21542;&#24573;&#30053;&#31867;&#22411;&#20026;&#25991;&#26412;&#33410;&#28857;&#30340;&#31062;&#20808;&#33410;&#28857;&#12290;</span>","<span class=\"c\">         * @method  getCommonAncestor</span>","<span class=\"c\">         * @param { Boolean } includeSelf &#26159;&#21542;&#20801;&#35768;&#33719;&#21462;&#21040;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;&#26159;&#24403;&#21069;range&#23545;&#35937;&#30340;&#23481;&#22120;&#33410;&#28857;</span>","<span class=\"c\">         * @param { Boolean } ignoreTextNode &#33719;&#21462;&#31062;&#20808;&#33410;&#28857;&#30340;&#36807;&#31243;&#20013;&#26159;&#21542;&#24573;&#30053;&#31867;&#22411;&#20026;&#25991;&#26412;&#33410;&#28857;&#30340;&#31062;&#20808;&#33410;&#28857;</span>","<span class=\"c\">         * @return { Node } &#24403;&#21069;range&#23545;&#35937;&#20869;&#25152;&#26377;&#33410;&#28857;&#30340;&#20844;&#20849;&#31062;&#20808;&#33410;&#28857;</span>","<span class=\"c\">         * @see UE.dom.Range:getCommonAncestor()</span>","<span class=\"c\">         * @see UE.dom.Range:getCommonAncestor(Boolean)</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;span&gt;</span>","<span class=\"c\">         *             &#25105;&#26159;&#19968;&#20010;</span>","<span class=\"c\">         *             &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *             &#25991;&#26412;</span>","<span class=\"c\">         *             &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *             &#20869;&#23481;</span>","<span class=\"c\">         *         &lt;/span&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         var ancestorNode = range.getCommonAncestor( true, false );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( ancestorNode.nodeType );</span>","<span class=\"c\">         *         //output: SPAN</span>","<span class=\"c\">         *         console.log( ancestorNode.parentNode.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         ancestorNode = range.getCommonAncestor( true, true );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( ancestorNode.nodeType );</span>","<span class=\"c\">         *         //output: SPAN</span>","<span class=\"c\">         *         console.log( ancestorNode.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        getCommonAncestor<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>includeSelf<span class=\"k\">,</span> ignoreTextNode<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> me <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">,</span>","                start <span class=\"k\">=</span> me<span class=\"k\">.</span>startContainer<span class=\"k\">,</span>","                end <span class=\"k\">=</span> me<span class=\"k\">.</span>endContainer<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>start <span class=\"k\">===</span> end<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>includeSelf <span class=\"k\">&amp;&amp;</span> selectOneNode<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">))</span> <span class=\"k\">{</span>","                    start <span class=\"k\">=</span> start<span class=\"k\">.</span>childNodes<span class=\"k\">[</span>me<span class=\"k\">.</span>startOffset<span class=\"k\">];</span>","                    <span class=\"k\">if</span><span class=\"k\">(</span>start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span>","                        <span class=\"k\">return</span> start<span class=\"k\">;</span>","                <span class=\"k\">}</span>","                <span class=\"c\">//&#21482;&#26377;&#22312;&#19978;&#26469;&#23601;&#30456;&#31561;&#30340;&#24773;&#20917;&#19979;&#25165;&#20250;&#20986;&#29616;&#26159;&#25991;&#26412;&#30340;&#24773;&#20917;</span>","                <span class=\"k\">return</span> ignoreTextNode <span class=\"k\">&amp;&amp;</span> start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">?</span> start<span class=\"k\">.</span>parentNode <span class=\"k\">:</span> start<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> domUtils<span class=\"k\">.</span>getCommonAncestor<span class=\"k\">(</span>start<span class=\"k\">,</span> end<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35843;&#25972;&#24403;&#21069;Range&#30340;&#24320;&#22987;&#21644;&#32467;&#26463;&#36793;&#30028;&#23481;&#22120;&#65292;&#22914;&#26524;&#26159;&#23481;&#22120;&#33410;&#28857;&#26159;&#25991;&#26412;&#33410;&#28857;,&#23601;&#35843;&#25972;&#21040;&#21253;&#21547;&#35813;&#25991;&#26412;&#33410;&#28857;&#30340;&#29238;&#33410;&#28857;&#19978;</span>","<span class=\"c\">         * @method trimBoundary</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *         &#20320;&#22909;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &#25105;&#26159;&#19968;&#27573;&#25991;&#26412;&#65292; &#25105;&#26049;&#36793;&#30340;&#27880;&#37322;&#20869;&#23481;&#20854;&#23454;&#26159;&#19981;&#23384;&#22312;&#30340;,&#20165;&#20165;&#26159;&#20026;&#20102;&#25551;&#36848;&#19968;&#19979;&#36873;&#21306;&#30340;&#36793;&#30028;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &#21040;&#36825;&#37324;&#25991;&#26412;&#32467;&#26463;&#20102;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.trimBoundary();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35843;&#25972;&#24403;&#21069;Range&#30340;&#24320;&#22987;&#21644;&#32467;&#26463;&#36793;&#30028;&#23481;&#22120;&#65292;&#22914;&#26524;&#26159;&#23481;&#22120;&#33410;&#28857;&#26159;&#25991;&#26412;&#33410;&#28857;,&#23601;&#35843;&#25972;&#21040;&#21253;&#21547;&#35813;&#25991;&#26412;&#33410;&#28857;&#30340;&#29238;&#33410;&#28857;&#19978;&#65292;</span>","<span class=\"c\">         * &#21487;&#20197;&#26681;&#25454; ignoreEnd &#21442;&#25968;&#30340;&#20540;&#20915;&#23450;&#26159;&#21542;&#35843;&#25972;&#23545;&#32467;&#26463;&#36793;&#30028;&#30340;&#35843;&#25972;</span>","<span class=\"c\">         * @method trimBoundary</span>","<span class=\"c\">         * @param { Boolean } ignoreEnd &#26159;&#21542;&#24573;&#30053;&#23545;&#32467;&#26463;&#36793;&#30028;&#30340;&#35843;&#25972;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *         &#20320;&#22909;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &#25105;&#26159;&#19968;&#27573;&#25991;&#26412;&#65292; &#25105;&#26049;&#36793;&#30340;&#27880;&#37322;&#20869;&#23481;&#20854;&#23454;&#26159;&#19981;&#23384;&#22312;&#30340;,&#20165;&#20165;&#26159;&#20026;&#20102;&#25551;&#36848;&#19968;&#19979;&#36873;&#21306;&#30340;&#36793;&#30028;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &#21040;&#36825;&#37324;&#25991;&#26412;&#32467;&#26463;&#20102;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.trimBoundary( true );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        trimBoundary<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>ignoreEnd<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">this</span><span class=\"k\">.</span>txtToElmBoundary<span class=\"k\">();</span>","            <span class=\"k\">var</span> start <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">,</span>","                offset <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startOffset<span class=\"k\">,</span>","                collapsed <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">,</span>","                end <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>offset <span class=\"k\">==</span> <span class=\"s\">0</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>start<span class=\"k\">);</span>","                <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>offset <span class=\"k\">&gt;=</span> start<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length<span class=\"k\">)</span> <span class=\"k\">{</span>","                        <span class=\"k\">this</span><span class=\"k\">.</span>setStartAfter<span class=\"k\">(</span>start<span class=\"k\">);</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                        <span class=\"k\">var</span> textNode <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>split<span class=\"k\">(</span>start<span class=\"k\">,</span> offset<span class=\"k\">);</span>","                        <span class=\"c\">//&#36319;&#26032;&#32467;&#26463;&#36793;&#30028;</span>","                        <span class=\"k\">if</span> <span class=\"k\">(</span>start <span class=\"k\">===</span> end<span class=\"k\">)</span> <span class=\"k\">{</span>","                            <span class=\"k\">this</span><span class=\"k\">.</span>setEnd<span class=\"k\">(</span>textNode<span class=\"k\">,</span> <span class=\"k\">this</span><span class=\"k\">.</span>endOffset <span class=\"k\">-</span> offset<span class=\"k\">);</span>","                        <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"k\">(</span>start<span class=\"k\">.</span>parentNode <span class=\"k\">===</span> end<span class=\"k\">)</span> <span class=\"k\">{</span>","                            <span class=\"k\">this</span><span class=\"k\">.</span>endOffset <span class=\"k\">+=</span> <span class=\"s\">1</span><span class=\"k\">;</span>","                        <span class=\"k\">}</span>","                        <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>textNode<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span>ignoreEnd<span class=\"k\">)</span> <span class=\"k\">{</span>","                offset <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>endOffset<span class=\"k\">;</span>","                end <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">;</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>end<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>offset <span class=\"k\">==</span> <span class=\"s\">0</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                        <span class=\"k\">this</span><span class=\"k\">.</span>setEndBefore<span class=\"k\">(</span>end<span class=\"k\">);</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                        offset <span class=\"k\">&lt;</span> end<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>split<span class=\"k\">(</span>end<span class=\"k\">,</span> offset<span class=\"k\">);</span>","                        <span class=\"k\">this</span><span class=\"k\">.</span>setEndAfter<span class=\"k\">(</span>end<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#22914;&#26524;&#36873;&#21306;&#22312;&#25991;&#26412;&#30340;&#36793;&#30028;&#19978;&#65292;&#23601;&#25193;&#23637;&#36873;&#21306;&#21040;&#25991;&#26412;&#30340;&#29238;&#33410;&#28857;&#19978;, &#22914;&#26524;&#24403;&#21069;&#36873;&#21306;&#26159;&#38381;&#21512;&#30340;&#65292; &#21017;&#20160;&#20040;&#20063;&#19981;&#20570;</span>","<span class=\"c\">         * @method txtToElmBoundary</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &#20320;&#22909;&#65292;&#25105;&#26159;&#19968;&#27573;&#25991;&#26412;&#65292; &#25105;&#26049;&#36793;&#30340;&#27880;&#37322;&#20869;&#23481;&#20854;&#23454;&#26159;&#19981;&#23384;&#22312;&#30340;,&#20165;&#20165;&#26159;&#20026;&#20102;&#25551;&#36848;&#19968;&#19979;&#36873;&#21306;&#30340;&#36793;&#30028;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &#21040;&#36825;&#37324;&#25991;&#26412;&#32467;&#26463;&#20102;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.txtToElmBoundary();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &#20320;&#22909;&#65292;&#25105;&#26159;&#19968;&#27573;&#25991;&#26412;&#65292; &#25105;&#26049;&#36793;&#30340;&#27880;&#37322;&#20869;&#23481;&#20854;&#23454;&#26159;&#19981;&#23384;&#22312;&#30340;,&#20165;&#20165;&#26159;&#20026;&#20102;&#25551;&#36848;&#19968;&#19979;&#36873;&#21306;&#30340;&#36793;&#30028;</span>","<span class=\"c\">         *         &#21040;&#36825;&#37324;&#25991;&#26412;&#32467;&#26463;&#20102;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.txtToElmBoundary();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#22914;&#26524;&#36873;&#21306;&#22312;&#25991;&#26412;&#30340;&#36793;&#30028;&#19978;&#65292;&#23601;&#25193;&#23637;&#36873;&#21306;&#21040;&#25991;&#26412;&#30340;&#29238;&#33410;&#28857;&#19978;, &#22914;&#26524;&#24403;&#21069;&#36873;&#21306;&#26159;&#38381;&#21512;&#30340;&#65292; &#21017;&#26681;&#25454;&#21442;&#25968;&#39033;</span>","<span class=\"c\">         * ignoreCollapsed &#30340;&#20540;&#20915;&#23450;&#26159;&#21542;&#25191;&#34892;&#35813;&#35843;&#25972;</span>","<span class=\"c\">         * @method txtToElmBoundary</span>","<span class=\"c\">         * @param { Boolean } ignoreCollapsed &#26159;&#21542;&#24573;&#30053;&#36873;&#21306;&#30340;&#38381;&#21512;&#29366;&#24577;&#65292; &#22914;&#26524;&#35813;&#21442;&#25968;&#21462;&#20540;&#20026;true&#65292; &#21017;</span>","<span class=\"c\">         *                      &#19981;&#35770;&#36873;&#21306;&#26159;&#21542;&#38381;&#21512;&#65292; &#37117;&#20250;&#25191;&#34892;&#35813;&#25805;&#20316;&#65292; &#21453;&#20043;&#65292; &#21017;&#19981;&#20250;&#23545;&#38381;&#21512;&#30340;&#36873;&#21306;&#25191;&#34892;&#35813;&#25805;&#20316;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *         &#20320;&#22909;&#65292;&#25105;&#26159;&#19968;&#27573;&#25991;&#26412;&#65292; &#25105;&#26049;&#36793;&#30340;&#27880;&#37322;&#20869;&#23481;&#20854;&#23454;&#26159;&#19981;&#23384;&#22312;&#30340;,&#20165;&#20165;&#26159;&#20026;&#20102;&#25551;&#36848;&#19968;&#19979;&#36873;&#21306;&#30340;&#36793;&#30028;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;&lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &#21040;&#36825;&#37324;&#25991;&#26412;&#32467;&#26463;&#20102;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.txtToElmBoundary( true );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 1</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *         &#20320;&#22909;&#65292;&#25105;&#26159;&#19968;&#27573;&#25991;&#26412;&#65292; &#25105;&#26049;&#36793;&#30340;&#27880;&#37322;&#20869;&#23481;&#20854;&#23454;&#26159;&#19981;&#23384;&#22312;&#30340;,&#20165;&#20165;&#26159;&#20026;&#20102;&#25551;&#36848;&#19968;&#19979;&#36873;&#21306;&#30340;&#36793;&#30028;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;&lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &#21040;&#36825;&#37324;&#25991;&#26412;&#32467;&#26463;&#20102;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.txtToElmBoundary( false );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.startContainer.nodeType );</span>","<span class=\"c\">         *         //output: 3</span>","<span class=\"c\">         *         console.log( range.endContainer.nodeType );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        txtToElmBoundary<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>ignoreCollapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">function</span> adjust<span class=\"k\">(</span>r<span class=\"k\">,</span> c<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">var</span> container <span class=\"k\">=</span> r<span class=\"k\">[</span>c <span class=\"k\">+</span> <span class=\"s\">'Container'</span><span class=\"k\">],</span>","                    offset <span class=\"k\">=</span> r<span class=\"k\">[</span>c <span class=\"k\">+</span> <span class=\"s\">'Offset'</span><span class=\"k\">];</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>container<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(!</span>offset<span class=\"k\">)</span> <span class=\"k\">{</span>","                        r<span class=\"k\">[</span><span class=\"s\">'set'</span> <span class=\"k\">+</span> c<span class=\"k\">.</span>replace<span class=\"k\">(</span><span class=\"s\">/(\\w)/</span><span class=\"k\">,</span> <span class=\"k\">function</span> <span class=\"k\">(</span>a<span class=\"k\">)</span> <span class=\"k\">{</span>","                            <span class=\"k\">return</span> a<span class=\"k\">.</span>toUpperCase<span class=\"k\">();</span>","                        <span class=\"k\">}</span><span class=\"k\">)</span> <span class=\"k\">+</span> <span class=\"s\">'Before'</span><span class=\"k\">](</span>container<span class=\"k\">);</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"k\">(</span>offset <span class=\"k\">&gt;=</span> container<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length<span class=\"k\">)</span> <span class=\"k\">{</span>","                        r<span class=\"k\">[</span><span class=\"s\">'set'</span> <span class=\"k\">+</span> c<span class=\"k\">.</span>replace<span class=\"k\">(</span><span class=\"s\">/(\\w)/</span><span class=\"k\">,</span> <span class=\"k\">function</span> <span class=\"k\">(</span>a<span class=\"k\">)</span> <span class=\"k\">{</span>","                            <span class=\"k\">return</span> a<span class=\"k\">.</span>toUpperCase<span class=\"k\">();</span>","                        <span class=\"k\">}</span><span class=\"k\">)</span> <span class=\"k\">+</span> <span class=\"s\">'After'</span> <span class=\"k\">](</span>container<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","","            <span class=\"k\">if</span> <span class=\"k\">(</span>ignoreCollapsed <span class=\"k\">||</span> <span class=\"k\">!</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                adjust<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">,</span> <span class=\"s\">'start'</span><span class=\"k\">);</span>","                adjust<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">,</span> <span class=\"s\">'end'</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#22312;&#24403;&#21069;&#36873;&#21306;&#30340;&#24320;&#22987;&#20301;&#32622;&#21518;&#32039;&#20020;&#30528;&#25554;&#20837;&#19968;&#20010;&#33410;&#28857;&#65292;&#26032;&#25554;&#20837;&#30340;&#33410;&#28857;&#20250;&#34987;&#35813;range&#21253;&#21547;</span>","<span class=\"c\">         * @method  insertNode</span>","<span class=\"c\">         * @param { Node } &#38656;&#35201;&#25554;&#20837;&#30340;&#33410;&#28857;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;div id=\"test\"&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         var newNode = document.createElement('div');</span>","<span class=\"c\">         *         newNode.id = 'ueditor';</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: &lt;span&gt;&lt;/span&gt;&lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         range.insertNode( newNode );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: &lt;div id=\"ueditor\"&gt;&lt;/div&gt;&lt;span&gt;&lt;/span&gt;&lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        insertNode<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> first <span class=\"k\">=</span> node<span class=\"k\">,</span> length <span class=\"k\">=</span> <span class=\"s\">1</span><span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">11</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                first <span class=\"k\">=</span> node<span class=\"k\">.</span>firstChild<span class=\"k\">;</span>","                length <span class=\"k\">=</span> node<span class=\"k\">.</span>childNodes<span class=\"k\">.</span>length<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">this</span><span class=\"k\">.</span>trimBoundary<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","            <span class=\"k\">var</span> start <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">,</span>","                offset <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startOffset<span class=\"k\">;</span>","            <span class=\"k\">var</span> nextNode <span class=\"k\">=</span> start<span class=\"k\">.</span>childNodes<span class=\"k\">[</span> offset <span class=\"k\">];</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>nextNode<span class=\"k\">)</span> <span class=\"k\">{</span>","                start<span class=\"k\">.</span>insertBefore<span class=\"k\">(</span>node<span class=\"k\">,</span> nextNode<span class=\"k\">);</span>","            <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                start<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>node<span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>first<span class=\"k\">.</span>parentNode <span class=\"k\">===</span> <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">this</span><span class=\"k\">.</span>endOffset <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>endOffset <span class=\"k\">+</span> length<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>first<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#38381;&#21512;&#36873;&#21306;&#21040;&#24403;&#21069;&#36873;&#21306;&#30340;&#24320;&#22987;&#20301;&#32622;&#65292; &#24182;&#19988;&#23450;&#20301;&#20809;&#26631;&#21040;&#38381;&#21512;&#21518;&#30340;&#20301;&#32622;</span>","<span class=\"c\">         * @method  setCursor</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @see UE.dom.Range:collapse()</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#38381;&#21512;&#36873;&#21306;&#65292; &#24182;&#19988;&#23450;&#20301;&#20809;&#26631;&#21040;&#38381;&#21512;&#21518;&#30340;&#20301;&#32622;&#65292; &#21487;&#20197;&#26681;&#25454;&#21442;&#25968;toEnd&#30340;&#20540;&#25511;&#21046;&#36873;&#21306;&#26159;&#21521;&#21069;&#38381;&#21512;&#36824;&#26159;&#21521;&#21518;&#38381;&#21512;</span>","<span class=\"c\">         * @method  setCursor</span>","<span class=\"c\">         * @param { Boolean } toEnd &#26159;&#21542;&#21521;&#21518;&#38381;&#21512;&#65292; &#22914;&#26524;&#20026;true&#65292; &#21017;&#38381;&#21512;&#36873;&#21306;&#26102;&#65292; &#23558;&#21521;&#32467;&#26463;&#23481;&#22120;&#26041;&#21521;&#38381;&#21512;&#65292;</span>","<span class=\"c\">         *                      &#21453;&#20043;&#65292;&#21017;&#21521;&#24320;&#22987;&#23481;&#22120;&#26041;&#21521;&#38381;&#21512;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @see UE.dom.Range:collapse(Boolean)</span>","<span class=\"c\">         */</span>","        setCursor<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>toEnd<span class=\"k\">,</span> noFillData<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>collapse<span class=\"k\">(!</span>toEnd<span class=\"k\">).</span>select<span class=\"k\">(</span>noFillData<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#21019;&#24314;&#24403;&#21069;range&#30340;&#19968;&#20010;&#20070;&#31614;&#65292;&#35760;&#24405;&#19979;&#24403;&#21069;range&#30340;&#20301;&#32622;&#65292;&#26041;&#20415;&#24403;dom&#26641;&#25913;&#21464;&#26102;&#65292;&#36824;&#33021;&#25214;&#22238;&#21407;&#26469;&#30340;&#36873;&#21306;&#20301;&#32622;</span>","<span class=\"c\">         * @method createBookmark</span>","<span class=\"c\">         * @param { Boolean } serialize &#25511;&#21046;&#36820;&#22238;&#30340;&#26631;&#35760;&#20301;&#32622;&#26159;&#23545;&#24403;&#21069;&#20301;&#32622;&#30340;&#24341;&#29992;&#36824;&#26159;ID&#65292;&#22914;&#26524;&#35813;&#20540;&#20026;true&#65292;&#21017;</span>","<span class=\"c\">         *                              &#36820;&#22238;&#26631;&#35760;&#20301;&#32622;&#30340;ID&#65292; &#21453;&#20043;&#21017;&#36820;&#22238;&#26631;&#35760;&#20301;&#32622;&#30340;&#24341;&#29992;</span>","<span class=\"c\">         * @return { KeyValueMap } &#36820;&#22238;&#19968;&#20010;&#20070;&#31614;&#35760;&#24405;&#38190;&#20540;&#23545;&#65292; &#20854;&#21253;&#21547;&#30340;key&#26377;&#65306; start =&gt; &#24320;&#22987;&#26631;&#35760;&#30340;ID&#25110;&#32773;&#24341;&#29992;&#65292;</span>","<span class=\"c\">         *                          end =&gt; &#32467;&#26463;&#26631;&#35760;&#30340;ID&#25110;&#24341;&#29992;&#65292; id =&gt; &#24403;&#21069;&#26631;&#35760;&#30340;&#31867;&#22411;&#65292; &#22914;&#26524;&#20026;true&#65292;&#21017;&#34920;&#31034;</span>","<span class=\"c\">         *                          &#36820;&#22238;&#30340;&#35760;&#24405;&#30340;&#31867;&#22411;&#20026;ID&#65292; &#21453;&#20043;&#21017;&#20026;&#24341;&#29992;</span>","<span class=\"c\">         */</span>","        createBookmark<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>serialize<span class=\"k\">,</span> same<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> endNode<span class=\"k\">,</span>","                startNode <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>createElement<span class=\"k\">(</span><span class=\"s\">'span'</span><span class=\"k\">);</span>","            startNode<span class=\"k\">.</span>style<span class=\"k\">.</span>cssText <span class=\"k\">=</span> <span class=\"s\">'display:none;line-height:0px;'</span><span class=\"k\">;</span>","            startNode<span class=\"k\">.</span>appendChild<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span><span class=\"s\">'</span><span class=\"t\">\\u</span><span class=\"s\">200D'</span><span class=\"k\">));</span>","            startNode<span class=\"k\">.</span>id <span class=\"k\">=</span> <span class=\"s\">'_baidu_bookmark_start_'</span> <span class=\"k\">+</span> <span class=\"k\">(</span>same <span class=\"k\">?</span> <span class=\"s\">''</span> <span class=\"k\">:</span> guid<span class=\"k\">++);</span>","","            <span class=\"k\">if</span> <span class=\"k\">(!</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                endNode <span class=\"k\">=</span> startNode<span class=\"k\">.</span>cloneNode<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","                endNode<span class=\"k\">.</span>id <span class=\"k\">=</span> <span class=\"s\">'_baidu_bookmark_end_'</span> <span class=\"k\">+</span> <span class=\"k\">(</span>same <span class=\"k\">?</span> <span class=\"s\">''</span> <span class=\"k\">:</span> guid<span class=\"k\">++);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">this</span><span class=\"k\">.</span>insertNode<span class=\"k\">(</span>startNode<span class=\"k\">);</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>endNode<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">this</span><span class=\"k\">.</span>collapse<span class=\"k\">().</span>insertNode<span class=\"k\">(</span>endNode<span class=\"k\">).</span>setEndBefore<span class=\"k\">(</span>endNode<span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">this</span><span class=\"k\">.</span>setStartAfter<span class=\"k\">(</span>startNode<span class=\"k\">);</span>","            <span class=\"k\">return</span> <span class=\"k\">{</span>","                start<span class=\"k\">:</span>serialize <span class=\"k\">?</span> startNode<span class=\"k\">.</span>id <span class=\"k\">:</span> startNode<span class=\"k\">,</span>","                end<span class=\"k\">:</span>endNode <span class=\"k\">?</span> serialize <span class=\"k\">?</span> endNode<span class=\"k\">.</span>id <span class=\"k\">:</span> endNode <span class=\"k\">:</span> <span class=\"k\">null</span><span class=\"k\">,</span>","                id<span class=\"k\">:</span>serialize","            <span class=\"k\">}</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         *  &#35843;&#25972;&#24403;&#21069;range&#30340;&#36793;&#30028;&#21040;&#20070;&#31614;&#20301;&#32622;&#65292;&#24182;&#21024;&#38500;&#35813;&#20070;&#31614;&#23545;&#35937;&#25152;&#26631;&#35760;&#30340;&#20301;&#32622;&#20869;&#30340;&#33410;&#28857;</span>","<span class=\"c\">         *  @method  moveToBookmark</span>","<span class=\"c\">         *  @param { BookMark } createBookmark&#25152;&#21019;&#24314;&#30340;&#26631;&#31614;&#23545;&#35937;</span>","<span class=\"c\">         *  @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         *  @see UE.dom.Range:createBookmark(Boolean)</span>","<span class=\"c\">         */</span>","        moveToBookmark<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>bookmark<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> start <span class=\"k\">=</span> bookmark<span class=\"k\">.</span>id <span class=\"k\">?</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>getElementById<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>start<span class=\"k\">)</span> <span class=\"k\">:</span> bookmark<span class=\"k\">.</span>start<span class=\"k\">,</span>","                end <span class=\"k\">=</span> bookmark<span class=\"k\">.</span>end <span class=\"k\">&amp;&amp;</span> bookmark<span class=\"k\">.</span>id <span class=\"k\">?</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>getElementById<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>end<span class=\"k\">)</span> <span class=\"k\">:</span> bookmark<span class=\"k\">.</span>end<span class=\"k\">;</span>","            <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>start<span class=\"k\">);</span>","            domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>start<span class=\"k\">);</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>end<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">this</span><span class=\"k\">.</span>setEndBefore<span class=\"k\">(</span>end<span class=\"k\">);</span>","                domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>end<span class=\"k\">);</span>","            <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                <span class=\"k\">this</span><span class=\"k\">.</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35843;&#25972;range&#30340;&#36793;&#30028;&#65292;&#20351;&#20854;\"&#25918;&#22823;\"&#21040;&#26368;&#36817;&#30340;&#29238;&#33410;&#28857;</span>","<span class=\"c\">         * @method  enlarge</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *          &lt;span&gt;</span>","<span class=\"c\">         *              &lt;b&gt;a&lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;b&lt;/b&gt;</span>","<span class=\"c\">         *              cdef</span>","<span class=\"c\">         *              &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *          &lt;/span&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *          range.enlarge();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *          //output: &lt;span&gt;&lt;b&gt;ab&lt;/b&gt;cdef&lt;/span&gt;</span>","<span class=\"c\">         *          console.log( enlarge.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35843;&#25972;range&#30340;&#36793;&#30028;&#65292;&#20351;&#20854;\"&#25918;&#22823;\"&#21040;&#26368;&#36817;&#30340;&#29238;&#33410;&#28857;&#65292;&#26681;&#25454;&#21442;&#25968; toBlock &#30340;&#21462;&#20540;&#65292; &#21487;&#20197;</span>","<span class=\"c\">         * &#35201;&#27714;&#25193;&#22823;&#20043;&#21518;&#30340;&#29238;&#33410;&#28857;&#26159;block&#33410;&#28857;</span>","<span class=\"c\">         * @method  enlarge</span>","<span class=\"c\">         * @param { Boolean } toBlock &#26159;&#21542;&#35201;&#27714;&#25193;&#22823;&#20043;&#21518;&#30340;&#29238;&#33410;&#28857;&#24517;&#39035;&#26159;block&#33410;&#28857;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *          &lt;span&gt;</span>","<span class=\"c\">         *              &lt;b&gt;a&lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;b&lt;/b&gt;</span>","<span class=\"c\">         *              cdef</span>","<span class=\"c\">         *              &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *          &lt;/span&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *          range.enlarge( true );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *          //output: &lt;div&gt;&lt;span&gt;&lt;b&gt;ab&lt;/b&gt;cdef&lt;/span&gt;&lt;/div&gt;</span>","<span class=\"c\">         *          console.log( enlarge.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        enlarge<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>toBlock<span class=\"k\">,</span> stopFn<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> isBody <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>isBody<span class=\"k\">,</span>","                pre<span class=\"k\">,</span> node<span class=\"k\">,</span> tmp <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span><span class=\"s\">''</span><span class=\"k\">);</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>toBlock<span class=\"k\">)</span> <span class=\"k\">{</span>","                node <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">;</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>node<span class=\"k\">.</span>childNodes<span class=\"k\">[</span><span class=\"k\">this</span><span class=\"k\">.</span>startOffset<span class=\"k\">])</span> <span class=\"k\">{</span>","                        pre <span class=\"k\">=</span> node <span class=\"k\">=</span> node<span class=\"k\">.</span>childNodes<span class=\"k\">[</span><span class=\"k\">this</span><span class=\"k\">.</span>startOffset<span class=\"k\">]</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                        node<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>tmp<span class=\"k\">);</span>","                        pre <span class=\"k\">=</span> node <span class=\"k\">=</span> tmp<span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                    pre <span class=\"k\">=</span> node<span class=\"k\">;</span>","                <span class=\"k\">}</span>","                <span class=\"k\">while</span> <span class=\"k\">(</span><span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>domUtils<span class=\"k\">.</span>isBlockElm<span class=\"k\">(</span>node<span class=\"k\">))</span> <span class=\"k\">{</span>","                        node <span class=\"k\">=</span> pre<span class=\"k\">;</span>","                        <span class=\"k\">while</span> <span class=\"k\">((</span>pre <span class=\"k\">=</span> node<span class=\"k\">.</span>previousSibling<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span>domUtils<span class=\"k\">.</span>isBlockElm<span class=\"k\">(</span>pre<span class=\"k\">))</span> <span class=\"k\">{</span>","                            node <span class=\"k\">=</span> pre<span class=\"k\">;</span>","                        <span class=\"k\">}</span>","                        <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>node<span class=\"k\">);</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    pre <span class=\"k\">=</span> node<span class=\"k\">;</span>","                    node <span class=\"k\">=</span> node<span class=\"k\">.</span>parentNode<span class=\"k\">;</span>","                <span class=\"k\">}</span>","                node <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">;</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>pre <span class=\"k\">=</span> node<span class=\"k\">.</span>childNodes<span class=\"k\">[</span><span class=\"k\">this</span><span class=\"k\">.</span>endOffset<span class=\"k\">])</span> <span class=\"k\">{</span>","                        node<span class=\"k\">.</span>insertBefore<span class=\"k\">(</span>tmp<span class=\"k\">,</span> pre<span class=\"k\">);</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                        node<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>tmp<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                    pre <span class=\"k\">=</span> node <span class=\"k\">=</span> tmp<span class=\"k\">;</span>","                <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                    pre <span class=\"k\">=</span> node<span class=\"k\">;</span>","                <span class=\"k\">}</span>","                <span class=\"k\">while</span> <span class=\"k\">(</span><span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>domUtils<span class=\"k\">.</span>isBlockElm<span class=\"k\">(</span>node<span class=\"k\">))</span> <span class=\"k\">{</span>","                        node <span class=\"k\">=</span> pre<span class=\"k\">;</span>","                        <span class=\"k\">while</span> <span class=\"k\">((</span>pre <span class=\"k\">=</span> node<span class=\"k\">.</span>nextSibling<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span>domUtils<span class=\"k\">.</span>isBlockElm<span class=\"k\">(</span>pre<span class=\"k\">))</span> <span class=\"k\">{</span>","                            node <span class=\"k\">=</span> pre<span class=\"k\">;</span>","                        <span class=\"k\">}</span>","                        <span class=\"k\">this</span><span class=\"k\">.</span>setEndAfter<span class=\"k\">(</span>node<span class=\"k\">);</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    pre <span class=\"k\">=</span> node<span class=\"k\">;</span>","                    node <span class=\"k\">=</span> node<span class=\"k\">.</span>parentNode<span class=\"k\">;</span>","                <span class=\"k\">}</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>tmp<span class=\"k\">.</span>parentNode <span class=\"k\">===</span> <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>endOffset<span class=\"k\">--;</span>","                <span class=\"k\">}</span>","                domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>tmp<span class=\"k\">);</span>","            <span class=\"k\">}</span>","","            <span class=\"c\">// &#25193;&#23637;&#36793;&#30028;&#21040;&#26368;&#22823;</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">while</span> <span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>startOffset <span class=\"k\">==</span> <span class=\"s\">0</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>stopFn <span class=\"k\">&amp;&amp;</span> stopFn<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">))</span> <span class=\"k\">{</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>isBody<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">))</span> <span class=\"k\">{</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">);</span>","                <span class=\"k\">}</span>","                <span class=\"k\">while</span> <span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>endOffset <span class=\"k\">==</span> <span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"k\">?</span> <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">.</span>childNodes<span class=\"k\">.</span>length <span class=\"k\">:</span> <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length<span class=\"k\">))</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>stopFn <span class=\"k\">&amp;&amp;</span> stopFn<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">))</span> <span class=\"k\">{</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>isBody<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">))</span> <span class=\"k\">{</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>setEndAfter<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">);</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#35843;&#25972;Range&#30340;&#36793;&#30028;&#65292;&#20351;&#20854;\"&#32553;&#23567;\"&#21040;&#26368;&#21512;&#36866;&#30340;&#20301;&#32622;</span>","<span class=\"c\">         * @method adjustmentBoundary</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @see UE.dom.Range:shrinkBoundary()</span>","<span class=\"c\">         */</span>","        adjustmentBoundary<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">()</span> <span class=\"k\">{</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">while</span> <span class=\"k\">(!</span>domUtils<span class=\"k\">.</span>isBody<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>startOffset <span class=\"k\">==</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">[</span><span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">?</span> <span class=\"s\">'nodeValue'</span> <span class=\"k\">:</span> <span class=\"s\">'childNodes'</span><span class=\"k\">].</span>length <span class=\"k\">&amp;&amp;</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">[</span><span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">?</span> <span class=\"s\">'nodeValue'</span> <span class=\"k\">:</span> <span class=\"s\">'childNodes'</span><span class=\"k\">].</span>length","                    <span class=\"k\">)</span> <span class=\"k\">{</span>","","                    <span class=\"k\">this</span><span class=\"k\">.</span>setStartAfter<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">);</span>","                <span class=\"k\">}</span>","                <span class=\"k\">while</span> <span class=\"k\">(!</span>domUtils<span class=\"k\">.</span>isBody<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span><span class=\"k\">this</span><span class=\"k\">.</span>endOffset <span class=\"k\">&amp;&amp;</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">[</span><span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">?</span> <span class=\"s\">'nodeValue'</span> <span class=\"k\">:</span> <span class=\"s\">'childNodes'</span><span class=\"k\">].</span>length","                    <span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">this</span><span class=\"k\">.</span>setEndBefore<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">);</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","        <span class=\"c\">/*</span>","<span class=\"c\">         * &#32473;range&#36873;&#21306;&#20013;&#30340;&#20869;&#23481;&#28155;&#21152;&#32473;&#23450;&#30340;&#26631;&#31614;&#65292;&#20027;&#35201;&#29992;&#20110;inline&#26631;&#31614;</span>","<span class=\"c\">         * @name applyInlineStyle</span>","<span class=\"c\">         * @grammar range.applyInlineStyle(tagName)        =&gt;  Range    //tagName&#20026;&#38656;&#35201;&#28155;&#21152;&#30340;&#26679;&#24335;&#26631;&#31614;&#21517;</span>","<span class=\"c\">         * @grammar range.applyInlineStyle(tagName,attrs)  =&gt;  Range    //attrs&#20026;&#23646;&#24615;json&#23545;&#35937;</span>","<span class=\"c\">         * @desc</span>","<span class=\"c\">         * &lt;code type=\"html\"&gt;&lt;p&gt;xxxx[xxxx]x&lt;/p&gt;  ==&gt;  range.applyInlineStyle(\"strong\")  ==&gt;  &lt;p&gt;xxxx[&lt;strong&gt;xxxx&lt;/strong&gt;]x&lt;/p&gt;</span>","<span class=\"c\">         * &lt;p&gt;xx[dd&lt;strong&gt;yyyy&lt;/strong&gt;]x&lt;/p&gt;  ==&gt;  range.applyInlineStyle(\"strong\")  ==&gt;  &lt;p&gt;xx[&lt;strong&gt;ddyyyy&lt;/strong&gt;]x&lt;/p&gt;</span>","<span class=\"c\">         * &lt;p&gt;xxxx[xxxx]x&lt;/p&gt;  ==&gt;  range.applyInlineStyle(\"strong\",{\"style\":\"font-size:12px\"})  ==&gt;  &lt;p&gt;xxxx[&lt;strong style=\"font-size:12px\"&gt;xxxx&lt;/strong&gt;]x&lt;/p&gt;&lt;/code&gt;</span>","<span class=\"c\">         */</span>","        applyInlineStyle<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>tagName<span class=\"k\">,</span> attrs<span class=\"k\">,</span> list<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span><span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","            <span class=\"k\">this</span><span class=\"k\">.</span>trimBoundary<span class=\"k\">().</span>enlarge<span class=\"k\">(</span><span class=\"k\">false</span><span class=\"k\">,</span>","                <span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">return</span> node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>isBlockElm<span class=\"k\">(</span>node<span class=\"k\">)</span>","                <span class=\"k\">}</span><span class=\"k\">).</span>adjustmentBoundary<span class=\"k\">();</span>","            <span class=\"k\">var</span> bookmark <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>createBookmark<span class=\"k\">(),</span>","                end <span class=\"k\">=</span> bookmark<span class=\"k\">.</span>end<span class=\"k\">,</span>","                filterFn <span class=\"k\">=</span> <span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">return</span> node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"k\">?</span> node<span class=\"k\">.</span>tagName<span class=\"k\">.</span>toLowerCase<span class=\"k\">()</span> <span class=\"k\">!=</span> <span class=\"s\">'br'</span> <span class=\"k\">:</span> <span class=\"k\">!</span>domUtils<span class=\"k\">.</span>isWhitespace<span class=\"k\">(</span>node<span class=\"k\">);</span>","                <span class=\"k\">}</span><span class=\"k\">,</span>","                current <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNextDomNode<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>start<span class=\"k\">,</span> <span class=\"k\">false</span><span class=\"k\">,</span> filterFn<span class=\"k\">),</span>","                node<span class=\"k\">,</span>","                pre<span class=\"k\">,</span>","                range <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>cloneRange<span class=\"k\">();</span>","            <span class=\"k\">while</span> <span class=\"k\">(</span>current <span class=\"k\">&amp;&amp;</span> <span class=\"k\">(</span>domUtils<span class=\"k\">.</span>getPosition<span class=\"k\">(</span>current<span class=\"k\">,</span> end<span class=\"k\">)</span> <span class=\"k\">&amp;</span> domUtils<span class=\"k\">.</span>POSITION_PRECEDING<span class=\"k\">))</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>current<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">||</span> dtd<span class=\"k\">[</span>tagName<span class=\"k\">][</span>current<span class=\"k\">.</span>tagName<span class=\"k\">])</span> <span class=\"k\">{</span>","                    range<span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>current<span class=\"k\">);</span>","                    node <span class=\"k\">=</span> current<span class=\"k\">;</span>","                    <span class=\"k\">while</span> <span class=\"k\">(</span>node <span class=\"k\">&amp;&amp;</span> <span class=\"k\">(</span>node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">||</span> dtd<span class=\"k\">[</span>tagName<span class=\"k\">][</span>node<span class=\"k\">.</span>tagName<span class=\"k\">])</span> <span class=\"k\">&amp;&amp;</span> node <span class=\"k\">!==</span> end<span class=\"k\">)</span> <span class=\"k\">{</span>","                        pre <span class=\"k\">=</span> node<span class=\"k\">;</span>","                        node <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNextDomNode<span class=\"k\">(</span>node<span class=\"k\">,</span> node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">,</span> <span class=\"k\">null</span><span class=\"k\">,</span> <span class=\"k\">function</span> <span class=\"k\">(</span>parent<span class=\"k\">)</span> <span class=\"k\">{</span>","                            <span class=\"k\">return</span> dtd<span class=\"k\">[</span>tagName<span class=\"k\">][</span>parent<span class=\"k\">.</span>tagName<span class=\"k\">];</span>","                        <span class=\"k\">}</span><span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                    <span class=\"k\">var</span> frag <span class=\"k\">=</span> range<span class=\"k\">.</span>setEndAfter<span class=\"k\">(</span>pre<span class=\"k\">).</span>extractContents<span class=\"k\">(),</span> elm<span class=\"k\">;</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>list <span class=\"k\">&amp;&amp;</span> list<span class=\"k\">.</span>length <span class=\"k\">&gt;</span> <span class=\"s\">0</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                        <span class=\"k\">var</span> level<span class=\"k\">,</span> top<span class=\"k\">;</span>","                        top <span class=\"k\">=</span> level <span class=\"k\">=</span> list<span class=\"k\">[</span><span class=\"s\">0</span><span class=\"k\">].</span>cloneNode<span class=\"k\">(</span><span class=\"k\">false</span><span class=\"k\">);</span>","                        <span class=\"k\">for</span> <span class=\"k\">(</span><span class=\"k\">var</span> i <span class=\"k\">=</span> <span class=\"s\">1</span><span class=\"k\">,</span> ci<span class=\"k\">;</span> ci <span class=\"k\">=</span> list<span class=\"k\">[</span>i<span class=\"k\">++];)</span> <span class=\"k\">{</span>","                            level<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>ci<span class=\"k\">.</span>cloneNode<span class=\"k\">(</span><span class=\"k\">false</span><span class=\"k\">));</span>","                            level <span class=\"k\">=</span> level<span class=\"k\">.</span>firstChild<span class=\"k\">;</span>","                        <span class=\"k\">}</span>","                        elm <span class=\"k\">=</span> level<span class=\"k\">;</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                        elm <span class=\"k\">=</span> range<span class=\"k\">.</span>document<span class=\"k\">.</span>createElement<span class=\"k\">(</span>tagName<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>attrs<span class=\"k\">)</span> <span class=\"k\">{</span>","                        domUtils<span class=\"k\">.</span>setAttributes<span class=\"k\">(</span>elm<span class=\"k\">,</span> attrs<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                    elm<span class=\"k\">.</span>appendChild<span class=\"k\">(</span>frag<span class=\"k\">);</span>","                    range<span class=\"k\">.</span>insertNode<span class=\"k\">(</span>list <span class=\"k\">?</span> top <span class=\"k\">:</span> elm<span class=\"k\">);</span>","                    <span class=\"c\">//&#22788;&#29702;&#19979;&#28369;&#32447;&#22312;a&#19978;&#30340;&#24773;&#20917;</span>","                    <span class=\"k\">var</span> aNode<span class=\"k\">;</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>tagName <span class=\"k\">==</span> <span class=\"s\">'span'</span> <span class=\"k\">&amp;&amp;</span> attrs<span class=\"k\">.</span>style <span class=\"k\">&amp;&amp;</span> <span class=\"s\">/text\\-decoration/</span><span class=\"k\">.</span>test<span class=\"k\">(</span>attrs<span class=\"k\">.</span>style<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">(</span>aNode <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>findParentByTagName<span class=\"k\">(</span>elm<span class=\"k\">,</span> <span class=\"s\">'a'</span><span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">)))</span> <span class=\"k\">{</span>","                        domUtils<span class=\"k\">.</span>setAttributes<span class=\"k\">(</span>aNode<span class=\"k\">,</span> attrs<span class=\"k\">);</span>","                        domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>elm<span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">);</span>","                        elm <span class=\"k\">=</span> aNode<span class=\"k\">;</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                        domUtils<span class=\"k\">.</span>mergeSibling<span class=\"k\">(</span>elm<span class=\"k\">);</span>","                        domUtils<span class=\"k\">.</span>clearEmptySibling<span class=\"k\">(</span>elm<span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                    <span class=\"c\">//&#21435;&#38500;&#23376;&#33410;&#28857;&#30456;&#21516;&#30340;</span>","                    domUtils<span class=\"k\">.</span>mergeChild<span class=\"k\">(</span>elm<span class=\"k\">,</span> attrs<span class=\"k\">);</span>","                    current <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNextDomNode<span class=\"k\">(</span>elm<span class=\"k\">,</span> <span class=\"k\">false</span><span class=\"k\">,</span> filterFn<span class=\"k\">);</span>","                    domUtils<span class=\"k\">.</span>mergeToParent<span class=\"k\">(</span>elm<span class=\"k\">);</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>node <span class=\"k\">===</span> end<span class=\"k\">)</span> <span class=\"k\">{</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                    current <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNextDomNode<span class=\"k\">(</span>current<span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">,</span> filterFn<span class=\"k\">);</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>moveToBookmark<span class=\"k\">(</span>bookmark<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","        <span class=\"c\">/*</span>","<span class=\"c\">         * &#23545;&#24403;&#21069;range&#36873;&#20013;&#30340;&#33410;&#28857;&#65292;&#21435;&#25481;&#32473;&#23450;&#30340;&#26631;&#31614;&#33410;&#28857;&#65292;&#20294;&#26631;&#31614;&#20013;&#30340;&#20869;&#23481;&#20445;&#30041;&#65292;&#20027;&#35201;&#29992;&#20110;&#22788;&#29702;inline&#20803;&#32032;</span>","<span class=\"c\">         * @name removeInlineStyle</span>","<span class=\"c\">         * @grammar range.removeInlineStyle(tagNames)  =&gt; Range  //tagNames &#20026;&#38656;&#35201;&#21435;&#25481;&#30340;&#26679;&#24335;&#26631;&#31614;&#21517;,&#25903;&#25345;\"b\"&#25110;&#32773;[\"b\",\"i\",\"u\"]</span>","<span class=\"c\">         * @desc</span>","<span class=\"c\">         * &lt;code type=\"html\"&gt;xx[x&lt;span&gt;xxx&lt;em&gt;yyy&lt;/em&gt;zz]z&lt;/span&gt;  =&gt; range.removeInlineStyle([\"em\"])  =&gt; xx[x&lt;span&gt;xxxyyyzz]z&lt;/span&gt;&lt;/code&gt;</span>","<span class=\"c\">         */</span>","        removeInlineStyle<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>tagNames<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span><span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","            tagNames <span class=\"k\">=</span> utils<span class=\"k\">.</span>isArray<span class=\"k\">(</span>tagNames<span class=\"k\">)</span> <span class=\"k\">?</span> tagNames <span class=\"k\">:</span> <span class=\"k\">[</span>tagNames<span class=\"k\">];</span>","            <span class=\"k\">this</span><span class=\"k\">.</span>shrinkBoundary<span class=\"k\">().</span>adjustmentBoundary<span class=\"k\">();</span>","            <span class=\"k\">var</span> start <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">,</span> end <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">;</span>","            <span class=\"k\">while</span> <span class=\"k\">(</span><span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>utils<span class=\"k\">.</span>indexOf<span class=\"k\">(</span>tagNames<span class=\"k\">,</span> start<span class=\"k\">.</span>tagName<span class=\"k\">.</span>toLowerCase<span class=\"k\">())</span> <span class=\"k\">&gt;</span> <span class=\"k\">-</span><span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>start<span class=\"k\">.</span>tagName<span class=\"k\">.</span>toLowerCase<span class=\"k\">()</span> <span class=\"k\">==</span> <span class=\"s\">'body'</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                        start <span class=\"k\">=</span> <span class=\"k\">null</span><span class=\"k\">;</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","                start <span class=\"k\">=</span> start<span class=\"k\">.</span>parentNode<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">while</span> <span class=\"k\">(</span><span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>end<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>utils<span class=\"k\">.</span>indexOf<span class=\"k\">(</span>tagNames<span class=\"k\">,</span> end<span class=\"k\">.</span>tagName<span class=\"k\">.</span>toLowerCase<span class=\"k\">())</span> <span class=\"k\">&gt;</span> <span class=\"k\">-</span><span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>end<span class=\"k\">.</span>tagName<span class=\"k\">.</span>toLowerCase<span class=\"k\">()</span> <span class=\"k\">==</span> <span class=\"s\">'body'</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                        end <span class=\"k\">=</span> <span class=\"k\">null</span><span class=\"k\">;</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","                end <span class=\"k\">=</span> end<span class=\"k\">.</span>parentNode<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">var</span> bookmark <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>createBookmark<span class=\"k\">(),</span>","                frag<span class=\"k\">,</span>","                tmpRange<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>start<span class=\"k\">)</span> <span class=\"k\">{</span>","                tmpRange <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>cloneRange<span class=\"k\">().</span>setEndBefore<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>start<span class=\"k\">).</span>setStartBefore<span class=\"k\">(</span>start<span class=\"k\">);</span>","                frag <span class=\"k\">=</span> tmpRange<span class=\"k\">.</span>extractContents<span class=\"k\">();</span>","                tmpRange<span class=\"k\">.</span>insertNode<span class=\"k\">(</span>frag<span class=\"k\">);</span>","                domUtils<span class=\"k\">.</span>clearEmptySibling<span class=\"k\">(</span>start<span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">);</span>","                start<span class=\"k\">.</span>parentNode<span class=\"k\">.</span>insertBefore<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>start<span class=\"k\">,</span> start<span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>end<span class=\"k\">)</span> <span class=\"k\">{</span>","                tmpRange <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>cloneRange<span class=\"k\">().</span>setStartAfter<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>end<span class=\"k\">).</span>setEndAfter<span class=\"k\">(</span>end<span class=\"k\">);</span>","                frag <span class=\"k\">=</span> tmpRange<span class=\"k\">.</span>extractContents<span class=\"k\">();</span>","                tmpRange<span class=\"k\">.</span>insertNode<span class=\"k\">(</span>frag<span class=\"k\">);</span>","                domUtils<span class=\"k\">.</span>clearEmptySibling<span class=\"k\">(</span>end<span class=\"k\">,</span> <span class=\"k\">false</span><span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">);</span>","                end<span class=\"k\">.</span>parentNode<span class=\"k\">.</span>insertBefore<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>end<span class=\"k\">,</span> end<span class=\"k\">.</span>nextSibling<span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">var</span> current <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNextDomNode<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>start<span class=\"k\">,</span> <span class=\"k\">false</span><span class=\"k\">,</span> <span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">return</span> node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">;</span>","            <span class=\"k\">}</span><span class=\"k\">),</span> next<span class=\"k\">;</span>","            <span class=\"k\">while</span> <span class=\"k\">(</span>current <span class=\"k\">&amp;&amp;</span> current <span class=\"k\">!==</span> bookmark<span class=\"k\">.</span>end<span class=\"k\">)</span> <span class=\"k\">{</span>","                next <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNextDomNode<span class=\"k\">(</span>current<span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">,</span> <span class=\"k\">function</span> <span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"k\">return</span> node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">;</span>","                <span class=\"k\">}</span><span class=\"k\">);</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>utils<span class=\"k\">.</span>indexOf<span class=\"k\">(</span>tagNames<span class=\"k\">,</span> current<span class=\"k\">.</span>tagName<span class=\"k\">.</span>toLowerCase<span class=\"k\">())</span> <span class=\"k\">&gt;</span> <span class=\"k\">-</span><span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>current<span class=\"k\">,</span> <span class=\"k\">true</span><span class=\"k\">);</span>","                <span class=\"k\">}</span>","                current <span class=\"k\">=</span> next<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>moveToBookmark<span class=\"k\">(</span>bookmark<span class=\"k\">);</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#33719;&#21462;&#24403;&#21069;&#36873;&#21306;&#20013;&#30340;&#39318;&#20010;&#33258;&#38381;&#21512;&#30340;&#33410;&#28857;</span>","<span class=\"c\">         * @method  getClosedNode</span>","<span class=\"c\">         * @return { Node | NULL } &#22914;&#26524;&#22312;&#24403;&#21069;&#36873;&#21306;&#20013;&#23384;&#22312;&#33258;&#38381;&#21512;&#30340;&#33410;&#28857;&#65292; &#21017;&#36820;&#22238;&#35813;&#33410;&#28857;&#65292; &#21542;&#21017;&#36820;&#22238;NULL</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;div&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *         &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *         &lt;span&gt;&lt;img&gt;&lt;/span&gt;</span>","<span class=\"c\">         *         &lt;i&gt;&lt;/i&gt;</span>","<span class=\"c\">         *         &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *     &lt;/div&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         var node = range.getCloseNode();</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         //output: IMG</span>","<span class=\"c\">         *         console.log( node.tagName );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        getClosedNode<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">()</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> node<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">var</span> range <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>cloneRange<span class=\"k\">().</span>adjustmentBoundary<span class=\"k\">().</span>shrinkBoundary<span class=\"k\">();</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>selectOneNode<span class=\"k\">(</span>range<span class=\"k\">))</span> <span class=\"k\">{</span>","                    <span class=\"k\">var</span> child <span class=\"k\">=</span> range<span class=\"k\">.</span>startContainer<span class=\"k\">.</span>childNodes<span class=\"k\">[</span>range<span class=\"k\">.</span>startOffset<span class=\"k\">];</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>child <span class=\"k\">&amp;&amp;</span> child<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">(</span>dtd<span class=\"k\">.</span>$empty<span class=\"k\">[</span>child<span class=\"k\">.</span>tagName<span class=\"k\">]</span> <span class=\"k\">||</span> dtd<span class=\"k\">.</span>$nonChild<span class=\"k\">[</span>child<span class=\"k\">.</span>tagName<span class=\"k\">]))</span> <span class=\"k\">{</span>","                        node <span class=\"k\">=</span> child<span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> node<span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#36873;&#20013;&#24403;&#21069;&#36873;&#21306;</span>","<span class=\"c\">         * @method select</span>","<span class=\"c\">         * @return { UE.dom.Range } &#36820;&#22238;&#24403;&#21069;Range&#23545;&#35937;</span>","<span class=\"c\">         */</span>","        select<span class=\"k\">:</span>browser<span class=\"k\">.</span>ie <span class=\"k\">?</span> <span class=\"k\">function</span> <span class=\"k\">(</span>noFillData<span class=\"k\">,</span> textRange<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> nativeRange<span class=\"k\">;</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span>","                <span class=\"k\">this</span><span class=\"k\">.</span>shrinkBoundary<span class=\"k\">();</span>","            <span class=\"k\">var</span> node <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>getClosedNode<span class=\"k\">();</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>node <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span>textRange<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">try</span> <span class=\"k\">{</span>","                    nativeRange <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>body<span class=\"k\">.</span>createControlRange<span class=\"k\">();</span>","                    nativeRange<span class=\"k\">.</span>addElement<span class=\"k\">(</span>node<span class=\"k\">);</span>","                    nativeRange<span class=\"k\">.</span>select<span class=\"k\">();</span>","                <span class=\"k\">}</span> <span class=\"k\">catch</span> <span class=\"k\">(</span>e<span class=\"k\">)</span> <span class=\"k\">{}</span>","                <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">var</span> bookmark <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>createBookmark<span class=\"k\">(),</span>","                start <span class=\"k\">=</span> bookmark<span class=\"k\">.</span>start<span class=\"k\">,</span>","                end<span class=\"k\">;</span>","            nativeRange <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>body<span class=\"k\">.</span>createTextRange<span class=\"k\">();</span>","            nativeRange<span class=\"k\">.</span>moveToElementText<span class=\"k\">(</span>start<span class=\"k\">);</span>","            nativeRange<span class=\"k\">.</span>moveStart<span class=\"k\">(</span><span class=\"s\">'character'</span><span class=\"k\">,</span> <span class=\"s\">1</span><span class=\"k\">);</span>","            <span class=\"k\">if</span> <span class=\"k\">(!</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">var</span> nativeRangeEnd <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>body<span class=\"k\">.</span>createTextRange<span class=\"k\">();</span>","                end <span class=\"k\">=</span> bookmark<span class=\"k\">.</span>end<span class=\"k\">;</span>","                nativeRangeEnd<span class=\"k\">.</span>moveToElementText<span class=\"k\">(</span>end<span class=\"k\">);</span>","                nativeRange<span class=\"k\">.</span>setEndPoint<span class=\"k\">(</span><span class=\"s\">'EndToEnd'</span><span class=\"k\">,</span> nativeRangeEnd<span class=\"k\">);</span>","            <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(!</span>noFillData <span class=\"k\">&amp;&amp;</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">.</span>nodeType <span class=\"k\">!=</span> <span class=\"s\">3</span><span class=\"k\">)</span> <span class=\"k\">{</span>","                    <span class=\"c\">//&#20351;&#29992;&lt;span&gt;|x&lt;span&gt;&#22266;&#23450;&#20303;&#20809;&#26631;</span>","                    <span class=\"k\">var</span> tmpText <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span>fillChar<span class=\"k\">),</span>","                        tmp <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>createElement<span class=\"k\">(</span><span class=\"s\">'span'</span><span class=\"k\">);</span>","                    tmp<span class=\"k\">.</span>appendChild<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span>fillChar<span class=\"k\">));</span>","                    start<span class=\"k\">.</span>parentNode<span class=\"k\">.</span>insertBefore<span class=\"k\">(</span>tmp<span class=\"k\">,</span> start<span class=\"k\">);</span>","                    start<span class=\"k\">.</span>parentNode<span class=\"k\">.</span>insertBefore<span class=\"k\">(</span>tmpText<span class=\"k\">,</span> start<span class=\"k\">);</span>","                    <span class=\"c\">//&#24403;&#28857;b,i,u&#26102;&#65292;&#19981;&#33021;&#28165;&#38500;i&#19978;&#36793;&#30340;b</span>","                    removeFillData<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">,</span> tmpText<span class=\"k\">);</span>","                    fillData <span class=\"k\">=</span> tmpText<span class=\"k\">;</span>","                    mergeSibling<span class=\"k\">(</span>tmp<span class=\"k\">,</span> <span class=\"s\">'previousSibling'</span><span class=\"k\">);</span>","                    mergeSibling<span class=\"k\">(</span>start<span class=\"k\">,</span> <span class=\"s\">'nextSibling'</span><span class=\"k\">);</span>","                    nativeRange<span class=\"k\">.</span>moveStart<span class=\"k\">(</span><span class=\"s\">'character'</span><span class=\"k\">,</span> <span class=\"k\">-</span><span class=\"s\">1</span><span class=\"k\">);</span>","                    nativeRange<span class=\"k\">.</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            <span class=\"k\">this</span><span class=\"k\">.</span>moveToBookmark<span class=\"k\">(</span>bookmark<span class=\"k\">);</span>","            tmp <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>tmp<span class=\"k\">);</span>","            <span class=\"c\">//IE&#22312;&#38544;&#34255;&#29366;&#24577;&#19979;&#19981;&#25903;&#25345;range&#25805;&#20316;&#65292;catch&#19968;&#19979;</span>","            <span class=\"k\">try</span> <span class=\"k\">{</span>","                nativeRange<span class=\"k\">.</span>select<span class=\"k\">();</span>","            <span class=\"k\">}</span> <span class=\"k\">catch</span> <span class=\"k\">(</span>e<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        <span class=\"k\">}</span> <span class=\"k\">:</span> <span class=\"k\">function</span> <span class=\"k\">(</span>notInsertFillData<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">function</span> checkOffset<span class=\"k\">(</span>rng<span class=\"k\">)</span><span class=\"k\">{</span>","","                <span class=\"k\">function</span> check<span class=\"k\">(</span>node<span class=\"k\">,</span>offset<span class=\"k\">,</span>dir<span class=\"k\">)</span><span class=\"k\">{</span>","                    <span class=\"k\">if</span><span class=\"k\">(</span>node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">&amp;&amp;</span> node<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length <span class=\"k\">&lt;</span> offset<span class=\"k\">)</span><span class=\"k\">{</span>","                        rng<span class=\"k\">[</span>dir <span class=\"k\">+</span> <span class=\"s\">'Offset'</span><span class=\"k\">]</span> <span class=\"k\">=</span> node<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","                check<span class=\"k\">(</span>rng<span class=\"k\">.</span>startContainer<span class=\"k\">,</span>rng<span class=\"k\">.</span>startOffset<span class=\"k\">,</span><span class=\"s\">'start'</span><span class=\"k\">);</span>","                check<span class=\"k\">(</span>rng<span class=\"k\">.</span>endContainer<span class=\"k\">,</span>rng<span class=\"k\">.</span>endOffset<span class=\"k\">,</span><span class=\"s\">'end'</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">var</span> win <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getWindow<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">),</span>","                sel <span class=\"k\">=</span> win<span class=\"k\">.</span>getSelection<span class=\"k\">(),</span>","                txtNode<span class=\"k\">;</span>","            <span class=\"c\">//FF&#19979;&#20851;&#38381;&#33258;&#21160;&#38271;&#39640;&#26102;&#28378;&#21160;&#26465;&#22312;&#20851;&#38381;dialog&#26102;&#20250;&#36339;</span>","            <span class=\"c\">//ff&#19979;&#22914;&#26524;&#19981;body.focus&#23558;&#19981;&#33021;&#23450;&#20301;&#38381;&#21512;&#20809;&#26631;&#21040;&#32534;&#36753;&#22120;&#20869;</span>","            browser<span class=\"k\">.</span>gecko <span class=\"k\">?</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>body<span class=\"k\">.</span>focus<span class=\"k\">()</span> <span class=\"k\">:</span> win<span class=\"k\">.</span>focus<span class=\"k\">();</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>sel<span class=\"k\">)</span> <span class=\"k\">{</span>","                sel<span class=\"k\">.</span>removeAllRanges<span class=\"k\">();</span>","                <span class=\"c\">// trace:870 chrome/safari&#21518;&#36793;&#26159;br&#23545;&#20110;&#38381;&#21512;&#24471;range&#19981;&#33021;&#23450;&#20301; &#25152;&#20197;&#21435;&#25481;&#20102;&#21028;&#26029;</span>","                <span class=\"c\">// this.startContainer.nodeType != 3 &amp;&amp;! ((child = this.startContainer.childNodes[this.startOffset]) &amp;&amp; child.nodeType == 1 &amp;&amp; child.tagName == 'BR'</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed <span class=\"k\">&amp;&amp;</span> <span class=\"k\">!</span>notInsertFillData<span class=\"k\">)</span> <span class=\"k\">{</span>","<span class=\"c\">//                    //opear&#22914;&#26524;&#27809;&#26377;&#33410;&#28857;&#25509;&#30528;&#65292;&#21407;&#29983;&#30340;&#19981;&#33021;&#22815;&#23450;&#20301;,&#19981;&#33021;&#22312;body&#30340;&#31532;&#19968;&#32423;&#25554;&#20837;&#31354;&#30333;&#33410;&#28857;</span>","<span class=\"c\">//                    if (notInsertFillData &amp;&amp; browser.opera &amp;&amp; !domUtils.isBody(this.startContainer) &amp;&amp; this.startContainer.nodeType == 1) {</span>","<span class=\"c\">//                        var tmp = this.document.createTextNode('');</span>","<span class=\"c\">//                        this.insertNode(tmp).setStart(tmp, 0).collapse(true);</span>","<span class=\"c\">//                    }</span>","<span class=\"c\">//</span>","                    <span class=\"c\">//&#22788;&#29702;&#20809;&#26631;&#33853;&#22312;&#25991;&#26412;&#33410;&#28857;&#30340;&#24773;&#20917;</span>","                    <span class=\"c\">//&#22788;&#29702;&#20197;&#19979;&#30340;&#24773;&#20917;</span>","                    <span class=\"c\">//&lt;b&gt;|xxxx&lt;/b&gt;</span>","                    <span class=\"c\">//&lt;b&gt;xxxx&lt;/b&gt;|xxxx</span>","                    <span class=\"c\">//xxxx&lt;b&gt;|&lt;/b&gt;</span>","                    <span class=\"k\">var</span> start <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">,</span>child <span class=\"k\">=</span> start<span class=\"k\">;</span>","                    <span class=\"k\">if</span><span class=\"k\">(</span>start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span><span class=\"k\">{</span>","                        child <span class=\"k\">=</span> start<span class=\"k\">.</span>childNodes<span class=\"k\">[</span><span class=\"k\">this</span><span class=\"k\">.</span>startOffset<span class=\"k\">];</span>","","                    <span class=\"k\">}</span>","                    <span class=\"k\">if</span><span class=\"k\">(</span> <span class=\"k\">!(</span>start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span> <span class=\"k\">&amp;&amp;</span> <span class=\"k\">this</span><span class=\"k\">.</span>startOffset<span class=\"k\">)</span>  <span class=\"k\">&amp;&amp;</span>","                        <span class=\"k\">(</span>child <span class=\"k\">?</span>","                            <span class=\"k\">(!</span>child<span class=\"k\">.</span>previousSibling <span class=\"k\">||</span> child<span class=\"k\">.</span>previousSibling<span class=\"k\">.</span>nodeType <span class=\"k\">!=</span> <span class=\"s\">3</span><span class=\"k\">)</span>","                            <span class=\"k\">:</span>","                            <span class=\"k\">(!</span>start<span class=\"k\">.</span>lastChild <span class=\"k\">||</span> start<span class=\"k\">.</span>lastChild<span class=\"k\">.</span>nodeType <span class=\"k\">!=</span> <span class=\"s\">3</span><span class=\"k\">)</span>","                        <span class=\"k\">)</span>","                    <span class=\"k\">)</span><span class=\"k\">{</span>","                        txtNode <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>createTextNode<span class=\"k\">(</span>fillChar<span class=\"k\">);</span>","                        <span class=\"c\">//&#36319;&#30528;&#21069;&#36793;&#36208;</span>","                        <span class=\"k\">this</span><span class=\"k\">.</span>insertNode<span class=\"k\">(</span>txtNode<span class=\"k\">);</span>","                        removeFillData<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">,</span> txtNode<span class=\"k\">);</span>","                        mergeSibling<span class=\"k\">(</span>txtNode<span class=\"k\">,</span> <span class=\"s\">'previousSibling'</span><span class=\"k\">);</span>","                        mergeSibling<span class=\"k\">(</span>txtNode<span class=\"k\">,</span> <span class=\"s\">'nextSibling'</span><span class=\"k\">);</span>","                        fillData <span class=\"k\">=</span> txtNode<span class=\"k\">;</span>","                        <span class=\"k\">this</span><span class=\"k\">.</span>setStart<span class=\"k\">(</span>txtNode<span class=\"k\">,</span> browser<span class=\"k\">.</span>webkit <span class=\"k\">?</span> <span class=\"s\">1</span> <span class=\"k\">:</span> <span class=\"s\">0</span><span class=\"k\">).</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","                <span class=\"k\">var</span> nativeRange <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">.</span>createRange<span class=\"k\">();</span>","                <span class=\"k\">if</span><span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed <span class=\"k\">&amp;&amp;</span> browser<span class=\"k\">.</span>opera <span class=\"k\">&amp;&amp;</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span><span class=\"k\">)</span><span class=\"k\">{</span>","                    <span class=\"k\">var</span> child <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">.</span>childNodes<span class=\"k\">[</span><span class=\"k\">this</span><span class=\"k\">.</span>startOffset<span class=\"k\">];</span>","                    <span class=\"k\">if</span><span class=\"k\">(!</span>child<span class=\"k\">)</span><span class=\"k\">{</span>","                        <span class=\"c\">//&#24448;&#21069;&#38752;&#25314;</span>","                        child <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">.</span>lastChild<span class=\"k\">;</span>","                        <span class=\"k\">if</span><span class=\"k\">(</span> child <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>isBr<span class=\"k\">(</span>child<span class=\"k\">))</span><span class=\"k\">{</span>","                            <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>child<span class=\"k\">).</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","                        <span class=\"k\">}</span>","                    <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                        <span class=\"c\">//&#21521;&#21518;&#38752;&#25314;</span>","                        <span class=\"k\">while</span><span class=\"k\">(</span>child <span class=\"k\">&amp;&amp;</span> domUtils<span class=\"k\">.</span>isBlockElm<span class=\"k\">(</span>child<span class=\"k\">))</span><span class=\"k\">{</span>","                            <span class=\"k\">if</span><span class=\"k\">(</span>child<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">1</span> <span class=\"k\">&amp;&amp;</span> child<span class=\"k\">.</span>childNodes<span class=\"k\">[</span><span class=\"s\">0</span><span class=\"k\">])</span><span class=\"k\">{</span>","                                child <span class=\"k\">=</span> child<span class=\"k\">.</span>childNodes<span class=\"k\">[</span><span class=\"s\">0</span><span class=\"k\">]</span>","                            <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                                <span class=\"k\">break</span><span class=\"k\">;</span>","                            <span class=\"k\">}</span>","                        <span class=\"k\">}</span>","                        child <span class=\"k\">&amp;&amp;</span> <span class=\"k\">this</span><span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>child<span class=\"k\">).</span>collapse<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">)</span>","                    <span class=\"k\">}</span>","","                <span class=\"k\">}</span>","                <span class=\"c\">//&#26159;createAddress&#26368;&#21518;&#19968;&#20301;&#31639;&#30340;&#19981;&#20934;&#65292;&#29616;&#22312;&#36825;&#37324;&#36827;&#34892;&#24494;&#35843;</span>","                checkOffset<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">);</span>","                nativeRange<span class=\"k\">.</span>setStart<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">,</span> <span class=\"k\">this</span><span class=\"k\">.</span>startOffset<span class=\"k\">);</span>","                nativeRange<span class=\"k\">.</span>setEnd<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>endContainer<span class=\"k\">,</span> <span class=\"k\">this</span><span class=\"k\">.</span>endOffset<span class=\"k\">);</span>","                sel<span class=\"k\">.</span>addRange<span class=\"k\">(</span>nativeRange<span class=\"k\">);</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#28378;&#21160;&#21040;&#24403;&#21069;range&#24320;&#22987;&#30340;&#20301;&#32622;</span>","<span class=\"c\">         * @method scrollToView</span>","<span class=\"c\">         * @param { Window } win &#24403;&#21069;range&#23545;&#35937;&#25152;&#23646;&#30340;window&#23545;&#35937;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;Range&#23545;&#35937;</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#28378;&#21160;&#21040;&#36317;&#31163;&#24403;&#21069;range&#24320;&#22987;&#20301;&#32622; offset &#30340;&#20301;&#32622;&#22788;</span>","<span class=\"c\">         * @method scrollToView</span>","<span class=\"c\">         * @param { Window } win &#24403;&#21069;range&#23545;&#35937;&#25152;&#23646;&#30340;window&#23545;&#35937;</span>","<span class=\"c\">         * @param { Number } offset &#36317;&#31163;range&#24320;&#22987;&#20301;&#32622;&#22788;&#30340;&#20559;&#31227;&#37327;&#65292; &#22914;&#26524;&#20026;&#27491;&#25968;&#65292; &#21017;&#21521;&#19979;&#20559;&#31227;&#65292; &#21453;&#20043;&#65292; &#21017;&#21521;&#19978;&#20559;&#31227;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;Range&#23545;&#35937;</span>","<span class=\"c\">         */</span>","        scrollToView<span class=\"k\">:</span><span class=\"k\">function</span> <span class=\"k\">(</span>win<span class=\"k\">,</span> offset<span class=\"k\">)</span> <span class=\"k\">{</span>","            win <span class=\"k\">=</span> win <span class=\"k\">?</span> window <span class=\"k\">:</span> domUtils<span class=\"k\">.</span>getWindow<span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>document<span class=\"k\">);</span>","            <span class=\"k\">var</span> me <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">,</span>","                span <span class=\"k\">=</span> me<span class=\"k\">.</span>document<span class=\"k\">.</span>createElement<span class=\"k\">(</span><span class=\"s\">'span'</span><span class=\"k\">);</span>","            <span class=\"c\">//trace:717</span>","            span<span class=\"k\">.</span>innerHTML <span class=\"k\">=</span> <span class=\"s\">'&amp;nbsp;'</span><span class=\"k\">;</span>","            me<span class=\"k\">.</span>cloneRange<span class=\"k\">().</span>insertNode<span class=\"k\">(</span>span<span class=\"k\">);</span>","            domUtils<span class=\"k\">.</span>scrollToView<span class=\"k\">(</span>span<span class=\"k\">,</span> win<span class=\"k\">,</span> offset<span class=\"k\">);</span>","            domUtils<span class=\"k\">.</span>remove<span class=\"k\">(</span>span<span class=\"k\">);</span>","            <span class=\"k\">return</span> me<span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#21028;&#26029;&#24403;&#21069;&#36873;&#21306;&#20869;&#23481;&#26159;&#21542;&#21344;&#20301;&#31526;</span>","<span class=\"c\">         * @method inFillChar</span>","<span class=\"c\">         * @return { Boolean } &#22914;&#26524;&#26159;&#21344;&#20301;&#31526;&#36820;&#22238;true&#65292;&#21542;&#21017;&#36820;&#22238;false</span>","<span class=\"c\">         */</span>","        inFillChar <span class=\"k\">:</span> <span class=\"k\">function</span><span class=\"k\">()</span><span class=\"k\">{</span>","            <span class=\"k\">var</span> start <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>startContainer<span class=\"k\">;</span>","            <span class=\"k\">if</span><span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed <span class=\"k\">&amp;&amp;</span> start<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span>","                <span class=\"k\">&amp;&amp;</span> start<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>replace<span class=\"k\">(</span><span class=\"k\">new</span> RegExp<span class=\"k\">(</span><span class=\"s\">'^'</span> <span class=\"k\">+</span> domUtils<span class=\"k\">.</span>fillChar<span class=\"k\">),</span><span class=\"s\">''</span><span class=\"k\">).</span>length <span class=\"k\">+</span> <span class=\"s\">1</span> <span class=\"k\">==</span> start<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>length","                <span class=\"k\">)</span><span class=\"k\">{</span>","                <span class=\"k\">return</span> <span class=\"k\">true</span><span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">false</span><span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#20445;&#23384;</span>","<span class=\"c\">         * @method createAddress</span>","<span class=\"c\">         * @return { Boolean } &#36820;&#22238;&#24320;&#22987;&#21644;&#32467;&#26463;&#30340;&#20301;&#32622;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;p&gt;</span>","<span class=\"c\">         *         aaaa</span>","<span class=\"c\">         *         &lt;em&gt;</span>","<span class=\"c\">         *             &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *             bbbb</span>","<span class=\"c\">         *             &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &lt;/em&gt;</span>","<span class=\"c\">         *     &lt;/p&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *         //output: {startAddress:[0,1,0,0],endAddress:[0,1,0,4]}</span>","<span class=\"c\">         *         console.log( range.createAddress() );</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        createAddress <span class=\"k\">:</span> <span class=\"k\">function</span><span class=\"k\">(</span>ignoreEnd<span class=\"k\">,</span>ignoreTxt<span class=\"k\">)</span><span class=\"k\">{</span>","            <span class=\"k\">var</span> addr <span class=\"k\">=</span> <span class=\"k\">{}</span><span class=\"k\">,</span>me <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">;</span>","","            <span class=\"k\">function</span> getAddress<span class=\"k\">(</span>isStart<span class=\"k\">)</span><span class=\"k\">{</span>","                <span class=\"k\">var</span> node <span class=\"k\">=</span> isStart <span class=\"k\">?</span> me<span class=\"k\">.</span>startContainer <span class=\"k\">:</span> me<span class=\"k\">.</span>endContainer<span class=\"k\">;</span>","                <span class=\"k\">var</span> parents <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>findParents<span class=\"k\">(</span>node<span class=\"k\">,</span><span class=\"k\">true</span><span class=\"k\">,</span><span class=\"k\">function</span><span class=\"k\">(</span>node<span class=\"k\">)</span><span class=\"k\">{</span><span class=\"k\">return</span> <span class=\"k\">!</span>domUtils<span class=\"k\">.</span>isBody<span class=\"k\">(</span>node<span class=\"k\">)</span><span class=\"k\">}</span><span class=\"k\">),</span>","                    addrs <span class=\"k\">=</span> <span class=\"k\">[];</span>","                <span class=\"k\">for</span><span class=\"k\">(</span><span class=\"k\">var</span> i <span class=\"k\">=</span> <span class=\"s\">0</span><span class=\"k\">,</span>ci<span class=\"k\">;</span>ci <span class=\"k\">=</span> parents<span class=\"k\">[</span>i<span class=\"k\">++];)</span><span class=\"k\">{</span>","                    addrs<span class=\"k\">.</span>push<span class=\"k\">(</span>domUtils<span class=\"k\">.</span>getNodeIndex<span class=\"k\">(</span>ci<span class=\"k\">,</span>ignoreTxt<span class=\"k\">));</span>","                <span class=\"k\">}</span>","                <span class=\"k\">var</span> firstIndex <span class=\"k\">=</span> <span class=\"s\">0</span><span class=\"k\">;</span>","","                <span class=\"k\">if</span><span class=\"k\">(</span>ignoreTxt<span class=\"k\">)</span><span class=\"k\">{</span>","                    <span class=\"k\">if</span><span class=\"k\">(</span>node<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span><span class=\"k\">{</span>","                        <span class=\"k\">var</span> tmpNode <span class=\"k\">=</span> node<span class=\"k\">.</span>previousSibling<span class=\"k\">;</span>","                        <span class=\"k\">while</span><span class=\"k\">(</span>tmpNode <span class=\"k\">&amp;&amp;</span> tmpNode<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span><span class=\"k\">{</span>","                            firstIndex <span class=\"k\">+=</span> tmpNode<span class=\"k\">.</span>nodeValue<span class=\"k\">.</span>replace<span class=\"k\">(</span>fillCharReg<span class=\"k\">,</span><span class=\"s\">''</span><span class=\"k\">).</span>length<span class=\"k\">;</span>","                            tmpNode <span class=\"k\">=</span> tmpNode<span class=\"k\">.</span>previousSibling<span class=\"k\">;</span>","                        <span class=\"k\">}</span>","                        firstIndex <span class=\"k\">+=</span>  <span class=\"k\">(</span>isStart <span class=\"k\">?</span> me<span class=\"k\">.</span>startOffset <span class=\"k\">:</span> me<span class=\"k\">.</span>endOffset<span class=\"k\">)</span><span class=\"c\">// - (fillCharReg.test(node.nodeValue) ? 1 : 0 )</span>","                    <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                        node <span class=\"k\">=</span>  node<span class=\"k\">.</span>childNodes<span class=\"k\">[</span> isStart <span class=\"k\">?</span> me<span class=\"k\">.</span>startOffset <span class=\"k\">:</span> me<span class=\"k\">.</span>endOffset<span class=\"k\">];</span>","                        <span class=\"k\">if</span><span class=\"k\">(</span>node<span class=\"k\">)</span><span class=\"k\">{</span>","                            firstIndex <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNodeIndex<span class=\"k\">(</span>node<span class=\"k\">,</span>ignoreTxt<span class=\"k\">);</span>","                        <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                            node <span class=\"k\">=</span> isStart <span class=\"k\">?</span> me<span class=\"k\">.</span>startContainer <span class=\"k\">:</span> me<span class=\"k\">.</span>endContainer<span class=\"k\">;</span>","                            <span class=\"k\">var</span> first <span class=\"k\">=</span> node<span class=\"k\">.</span>firstChild<span class=\"k\">;</span>","                            <span class=\"k\">while</span><span class=\"k\">(</span>first<span class=\"k\">)</span><span class=\"k\">{</span>","                                <span class=\"k\">if</span><span class=\"k\">(</span>domUtils<span class=\"k\">.</span>isFillChar<span class=\"k\">(</span>first<span class=\"k\">))</span><span class=\"k\">{</span>","                                    first <span class=\"k\">=</span> first<span class=\"k\">.</span>nextSibling<span class=\"k\">;</span>","                                    <span class=\"k\">continue</span><span class=\"k\">;</span>","                                <span class=\"k\">}</span>","                                firstIndex<span class=\"k\">++;</span>","                                <span class=\"k\">if</span><span class=\"k\">(</span>first<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span><span class=\"k\">{</span>","                                    <span class=\"k\">while</span><span class=\"k\">(</span> first <span class=\"k\">&amp;&amp;</span> first<span class=\"k\">.</span>nodeType <span class=\"k\">==</span> <span class=\"s\">3</span><span class=\"k\">)</span><span class=\"k\">{</span>","                                        first <span class=\"k\">=</span> first<span class=\"k\">.</span>nextSibling<span class=\"k\">;</span>","                                    <span class=\"k\">}</span>","                                <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                                    first <span class=\"k\">=</span> first<span class=\"k\">.</span>nextSibling<span class=\"k\">;</span>","                                <span class=\"k\">}</span>","                            <span class=\"k\">}</span>","                        <span class=\"k\">}</span>","                    <span class=\"k\">}</span>","","                <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                    firstIndex <span class=\"k\">=</span> isStart <span class=\"k\">?</span> domUtils<span class=\"k\">.</span>isFillChar<span class=\"k\">(</span>node<span class=\"k\">)</span> <span class=\"k\">?</span> <span class=\"s\">0</span> <span class=\"k\">:</span> me<span class=\"k\">.</span>startOffset  <span class=\"k\">:</span> me<span class=\"k\">.</span>endOffset","                <span class=\"k\">}</span>","                <span class=\"k\">if</span><span class=\"k\">(</span>firstIndex <span class=\"k\">&lt;</span> <span class=\"s\">0</span><span class=\"k\">)</span><span class=\"k\">{</span>","                    firstIndex <span class=\"k\">=</span> <span class=\"s\">0</span><span class=\"k\">;</span>","                <span class=\"k\">}</span>","                addrs<span class=\"k\">.</span>push<span class=\"k\">(</span>firstIndex<span class=\"k\">);</span>","                <span class=\"k\">return</span> addrs<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            addr<span class=\"k\">.</span>startAddress <span class=\"k\">=</span> getAddress<span class=\"k\">(</span><span class=\"k\">true</span><span class=\"k\">);</span>","            <span class=\"k\">if</span><span class=\"k\">(!</span>ignoreEnd<span class=\"k\">)</span><span class=\"k\">{</span>","                addr<span class=\"k\">.</span>endAddress <span class=\"k\">=</span> me<span class=\"k\">.</span>collapsed <span class=\"k\">?</span> <span class=\"k\">[].</span>concat<span class=\"k\">(</span>addr<span class=\"k\">.</span>startAddress<span class=\"k\">)</span> <span class=\"k\">:</span> getAddress<span class=\"k\">();</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> addr<span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#20445;&#23384;</span>","<span class=\"c\">         * @method createAddress</span>","<span class=\"c\">         * @return { Boolean } &#36820;&#22238;&#24320;&#22987;&#21644;&#32467;&#26463;&#30340;&#20301;&#32622;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *     &lt;p&gt;</span>","<span class=\"c\">         *         aaaa</span>","<span class=\"c\">         *         &lt;em&gt;</span>","<span class=\"c\">         *             &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *             bbbb</span>","<span class=\"c\">         *             &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         *         &lt;/em&gt;</span>","<span class=\"c\">         *     &lt;/p&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;script&gt;</span>","<span class=\"c\">         *         var range = editor.selection.getRange();</span>","<span class=\"c\">         *         range.moveToAddress({startAddress:[0,1,0,0],endAddress:[0,1,0,4]});</span>","<span class=\"c\">         *         range.select();</span>","<span class=\"c\">         *         //output: 'bbbb'</span>","<span class=\"c\">         *         console.log(editor.selection.getText());</span>","<span class=\"c\">         *     &lt;/script&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        moveToAddress <span class=\"k\">:</span> <span class=\"k\">function</span><span class=\"k\">(</span>addr<span class=\"k\">,</span>ignoreEnd<span class=\"k\">)</span><span class=\"k\">{</span>","            <span class=\"k\">var</span> me <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">;</span>","            <span class=\"k\">function</span> getNode<span class=\"k\">(</span>address<span class=\"k\">,</span>isStart<span class=\"k\">)</span><span class=\"k\">{</span>","                <span class=\"k\">var</span> tmpNode <span class=\"k\">=</span> me<span class=\"k\">.</span>document<span class=\"k\">.</span>body<span class=\"k\">,</span>","                    parentNode<span class=\"k\">,</span>offset<span class=\"k\">;</span>","                <span class=\"k\">for</span><span class=\"k\">(</span><span class=\"k\">var</span> i<span class=\"k\">=</span> <span class=\"s\">0</span><span class=\"k\">,</span>ci<span class=\"k\">,</span>l<span class=\"k\">=</span>address<span class=\"k\">.</span>length<span class=\"k\">;</span>i<span class=\"k\">&lt;</span>l<span class=\"k\">;</span>i<span class=\"k\">++)</span><span class=\"k\">{</span>","                    ci <span class=\"k\">=</span> address<span class=\"k\">[</span>i<span class=\"k\">];</span>","                    parentNode <span class=\"k\">=</span> tmpNode<span class=\"k\">;</span>","                    tmpNode <span class=\"k\">=</span> tmpNode<span class=\"k\">.</span>childNodes<span class=\"k\">[</span>ci<span class=\"k\">];</span>","                    <span class=\"k\">if</span><span class=\"k\">(!</span>tmpNode<span class=\"k\">)</span><span class=\"k\">{</span>","                        offset <span class=\"k\">=</span> ci<span class=\"k\">;</span>","                        <span class=\"k\">break</span><span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","                <span class=\"k\">if</span><span class=\"k\">(</span>isStart<span class=\"k\">)</span><span class=\"k\">{</span>","                    <span class=\"k\">if</span><span class=\"k\">(</span>tmpNode<span class=\"k\">)</span><span class=\"k\">{</span>","                        me<span class=\"k\">.</span>setStartBefore<span class=\"k\">(</span>tmpNode<span class=\"k\">)</span>","                    <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                        me<span class=\"k\">.</span>setStart<span class=\"k\">(</span>parentNode<span class=\"k\">,</span>offset<span class=\"k\">)</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                    <span class=\"k\">if</span><span class=\"k\">(</span>tmpNode<span class=\"k\">)</span><span class=\"k\">{</span>","                        me<span class=\"k\">.</span>setEndBefore<span class=\"k\">(</span>tmpNode<span class=\"k\">)</span>","                    <span class=\"k\">}</span><span class=\"k\">else</span><span class=\"k\">{</span>","                        me<span class=\"k\">.</span>setEnd<span class=\"k\">(</span>parentNode<span class=\"k\">,</span>offset<span class=\"k\">)</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","            getNode<span class=\"k\">(</span>addr<span class=\"k\">.</span>startAddress<span class=\"k\">,</span><span class=\"k\">true</span><span class=\"k\">);</span>","            <span class=\"k\">!</span>ignoreEnd <span class=\"k\">&amp;&amp;</span> addr<span class=\"k\">.</span>endAddress <span class=\"k\">&amp;&amp;</span>  getNode<span class=\"k\">(</span>addr<span class=\"k\">.</span>endAddress<span class=\"k\">);</span>","            <span class=\"k\">return</span> me<span class=\"k\">;</span>","        <span class=\"k\">}</span><span class=\"k\">,</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#21028;&#26029;&#32473;&#23450;&#30340;Range&#23545;&#35937;&#26159;&#21542;&#21644;&#24403;&#21069;Range&#23545;&#35937;&#34920;&#31034;&#30340;&#26159;&#21516;&#19968;&#20010;&#36873;&#21306;</span>","<span class=\"c\">         * @method equals</span>","<span class=\"c\">         * @param { UE.dom.Range } &#38656;&#35201;&#21028;&#26029;&#30340;Range&#23545;&#35937;</span>","<span class=\"c\">         * @return { Boolean } &#22914;&#26524;&#32473;&#23450;&#30340;Range&#23545;&#35937;&#19982;&#24403;&#21069;Range&#23545;&#35937;&#34920;&#31034;&#30340;&#26159;&#21516;&#19968;&#20010;&#36873;&#21306;&#65292; &#21017;&#36820;&#22238;true&#65292; &#21542;&#21017;&#36820;&#22238;false</span>","<span class=\"c\">        equals : function(rng){</span>","<span class=\"c\">            for(var p in this){</span>","<span class=\"c\">                if(this.hasOwnProperty(p)){</span>","<span class=\"c\">                    if(this[p] !== rng[p])</span>","<span class=\"c\">                        return false</span>","<span class=\"c\">                }</span>","<span class=\"c\">            }</span>","<span class=\"c\">            return true;</span>","","<span class=\"c\">        },</span>","","<span class=\"c\">        /**</span>","<span class=\"c\">         * &#36941;&#21382;range&#20869;&#30340;&#33410;&#28857;&#12290;&#27599;&#24403;&#36941;&#21382;&#19968;&#20010;&#33410;&#28857;&#26102;&#65292; &#37117;&#20250;&#25191;&#34892;&#21442;&#25968;&#39033; doFn &#25351;&#23450;&#30340;&#20989;&#25968;&#65292; &#35813;&#20989;&#25968;&#30340;&#25509;&#21463;&#24403;&#21069;&#36941;&#21382;&#30340;&#33410;&#28857;</span>","<span class=\"c\">         * &#20316;&#20026;&#20854;&#21442;&#25968;&#12290;</span>","<span class=\"c\">         * @method traversal</span>","<span class=\"c\">         * @param { Function }  doFn &#23545;&#27599;&#20010;&#36941;&#21382;&#30340;&#33410;&#28857;&#35201;&#25191;&#34892;&#30340;&#26041;&#27861;&#65292; &#35813;&#26041;&#27861;&#25509;&#21463;&#24403;&#21069;&#36941;&#21382;&#30340;&#33410;&#28857;&#20316;&#20026;&#20854;&#21442;&#25968;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: &lt;span&gt;&lt;/span&gt;&lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     range.traversal( function ( node ) {</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         if ( node.nodeType === 1 ) {</span>","<span class=\"c\">         *             node.className = \"test\";</span>","<span class=\"c\">         *         }</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     } );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: &lt;span class=\"test\"&gt;&lt;/span&gt;&lt;a class=\"test\"&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","","        <span class=\"c\">/**</span>","<span class=\"c\">         * &#36941;&#21382;range&#20869;&#30340;&#33410;&#28857;&#12290;</span>","<span class=\"c\">         * &#27599;&#24403;&#36941;&#21382;&#19968;&#20010;&#33410;&#28857;&#26102;&#65292; &#37117;&#20250;&#25191;&#34892;&#21442;&#25968;&#39033; doFn &#25351;&#23450;&#30340;&#20989;&#25968;&#65292; &#35813;&#20989;&#25968;&#30340;&#25509;&#21463;&#24403;&#21069;&#36941;&#21382;&#30340;&#33410;&#28857;</span>","<span class=\"c\">         * &#20316;&#20026;&#20854;&#21442;&#25968;&#12290;</span>","<span class=\"c\">         * &#21487;&#20197;&#36890;&#36807;&#21442;&#25968;&#39033; filterFn &#26469;&#25351;&#23450;&#19968;&#20010;&#36807;&#28388;&#22120;&#65292; &#21482;&#26377;&#31526;&#21512;&#35813;&#36807;&#28388;&#22120;&#36807;&#28388;&#35268;&#21017;&#30340;&#33410;&#28857;&#25165;&#20250;&#35302;</span>","<span class=\"c\">         * &#21457;doFn&#20989;&#25968;&#30340;&#25191;&#34892;</span>","<span class=\"c\">         * @method traversal</span>","<span class=\"c\">         * @param { Function } doFn &#23545;&#27599;&#20010;&#36941;&#21382;&#30340;&#33410;&#28857;&#35201;&#25191;&#34892;&#30340;&#26041;&#27861;&#65292; &#35813;&#26041;&#27861;&#25509;&#21463;&#24403;&#21069;&#36941;&#21382;&#30340;&#33410;&#28857;&#20316;&#20026;&#20854;&#21442;&#25968;</span>","<span class=\"c\">         * @param { Function } filterFn &#36807;&#28388;&#22120;&#65292; &#35813;&#20989;&#25968;&#25509;&#21463;&#24403;&#21069;&#36941;&#21382;&#30340;&#33410;&#28857;&#20316;&#20026;&#21442;&#25968;&#65292; &#22914;&#26524;&#35813;&#33410;&#28857;&#28385;&#36275;&#36807;&#28388;</span>","<span class=\"c\">         *                      &#35268;&#21017;&#65292; &#35831;&#36820;&#22238;true&#65292; &#35813;&#33410;&#28857;&#20250;&#35302;&#21457;doFn&#65292; &#21542;&#21017;&#65292; &#35831;&#36820;&#22238;false&#65292; &#21017;&#35813;&#33410;&#28857;&#19981;</span>","<span class=\"c\">         *                      &#20250;&#35302;&#21457;doFn&#12290;</span>","<span class=\"c\">         * @return { UE.dom.Range } &#24403;&#21069;range&#23545;&#35937;</span>","<span class=\"c\">         * @see UE.dom.Range:traversal(Function)</span>","<span class=\"c\">         * @example</span>","<span class=\"c\">         * ```html</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#24320;&#22987; --&gt;</span>","<span class=\"c\">         *     &lt;span&gt;&lt;/span&gt;</span>","<span class=\"c\">         *     &lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     &lt;!-- &#36873;&#21306;&#32467;&#26463; --&gt;</span>","<span class=\"c\">         * &lt;/body&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;script&gt;</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: &lt;span&gt;&lt;/span&gt;&lt;a&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     range.traversal( function ( node ) {</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *         node.className = \"test\";</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     }, function ( node ) {</span>","<span class=\"c\">         *          return node.nodeType === 1;</span>","<span class=\"c\">         *     } );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         *     //output: &lt;span class=\"test\"&gt;&lt;/span&gt;&lt;a class=\"test\"&gt;&lt;/a&gt;</span>","<span class=\"c\">         *     console.log( range.cloneContents() );</span>","<span class=\"c\">         *</span>","<span class=\"c\">         * &lt;/script&gt;</span>","<span class=\"c\">         * ```</span>","<span class=\"c\">         */</span>","        traversal<span class=\"k\">:</span><span class=\"k\">function</span><span class=\"k\">(</span>doFn<span class=\"k\">,</span>filterFn<span class=\"k\">)</span><span class=\"k\">{</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span><span class=\"k\">this</span><span class=\"k\">.</span>collapsed<span class=\"k\">)</span>","                <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">;</span>","            <span class=\"k\">var</span> bookmark <span class=\"k\">=</span> <span class=\"k\">this</span><span class=\"k\">.</span>createBookmark<span class=\"k\">(),</span>","                end <span class=\"k\">=</span> bookmark<span class=\"k\">.</span>end<span class=\"k\">,</span>","                current <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNextDomNode<span class=\"k\">(</span>bookmark<span class=\"k\">.</span>start<span class=\"k\">,</span> <span class=\"k\">false</span><span class=\"k\">,</span> filterFn<span class=\"k\">);</span>","            <span class=\"k\">while</span> <span class=\"k\">(</span>current <span class=\"k\">&amp;&amp;</span> current <span class=\"k\">!==</span> end <span class=\"k\">&amp;&amp;</span> <span class=\"k\">(</span>domUtils<span class=\"k\">.</span>getPosition<span class=\"k\">(</span>current<span class=\"k\">,</span> end<span class=\"k\">)</span> <span class=\"k\">&amp;</span> domUtils<span class=\"k\">.</span>POSITION_PRECEDING<span class=\"k\">))</span> <span class=\"k\">{</span>","                <span class=\"k\">var</span> tmpNode <span class=\"k\">=</span> domUtils<span class=\"k\">.</span>getNextDomNode<span class=\"k\">(</span>current<span class=\"k\">,</span><span class=\"k\">false</span><span class=\"k\">,</span>filterFn<span class=\"k\">);</span>","                doFn<span class=\"k\">(</span>current<span class=\"k\">);</span>","                current <span class=\"k\">=</span> tmpNode<span class=\"k\">;</span>","            <span class=\"k\">}</span>","            <span class=\"k\">return</span> <span class=\"k\">this</span><span class=\"k\">.</span>moveToBookmark<span class=\"k\">(</span>bookmark<span class=\"k\">);</span>","        <span class=\"k\">}</span>","    <span class=\"k\">}</span><span class=\"k\">;</span>","<span class=\"k\">}</span><span class=\"k\">)();</span>"];
_$jscoverage['core/Range.js'][22]++;
(function () {
  _$jscoverage['core/Range.js'][23]++;
  var guid = 0, fillChar = domUtils.fillChar, fillData;
  _$jscoverage['core/Range.js'][31]++;
  function updateCollapse(range) {
    _$jscoverage['core/Range.js'][32]++;
    range.collapsed = (range.startContainer && range.endContainer && (range.startContainer === range.endContainer) && (range.startOffset == range.endOffset));
}
  _$jscoverage['core/Range.js'][38]++;
  function selectOneNode(rng) {
    _$jscoverage['core/Range.js'][39]++;
    return ((! rng.collapsed) && (rng.startContainer.nodeType == 1) && (rng.startContainer === rng.endContainer) && ((rng.endOffset - rng.startOffset) == 1));
}
  _$jscoverage['core/Range.js'][41]++;
  function setEndPoint(toStart, node, offset, range) {
    _$jscoverage['core/Range.js'][43]++;
    if (((node.nodeType == 1) && (dtd.$empty[node.tagName] || dtd.$nonChild[node.tagName]))) {
      _$jscoverage['core/Range.js'][44]++;
      offset = (domUtils.getNodeIndex(node) + (toStart? 0: 1));
      _$jscoverage['core/Range.js'][45]++;
      node = node.parentNode;
    }
    _$jscoverage['core/Range.js'][47]++;
    if (toStart) {
      _$jscoverage['core/Range.js'][48]++;
      range.startContainer = node;
      _$jscoverage['core/Range.js'][49]++;
      range.startOffset = offset;
      _$jscoverage['core/Range.js'][50]++;
      if ((! range.endContainer)) {
        _$jscoverage['core/Range.js'][51]++;
        range.collapse(true);
      }
    }
    else {
      _$jscoverage['core/Range.js'][54]++;
      range.endContainer = node;
      _$jscoverage['core/Range.js'][55]++;
      range.endOffset = offset;
      _$jscoverage['core/Range.js'][56]++;
      if ((! range.startContainer)) {
        _$jscoverage['core/Range.js'][57]++;
        range.collapse(false);
      }
    }
    _$jscoverage['core/Range.js'][60]++;
    updateCollapse(range);
    _$jscoverage['core/Range.js'][61]++;
    return range;
}
  _$jscoverage['core/Range.js'][64]++;
  function execContentsAction(range, action) {
    _$jscoverage['core/Range.js'][67]++;
    var start = range.startContainer, end = range.endContainer, startOffset = range.startOffset, endOffset = range.endOffset, doc = range.document, frag = doc.createDocumentFragment(), tmpStart, tmpEnd;
    _$jscoverage['core/Range.js'][74]++;
    if ((start.nodeType == 1)) {
      _$jscoverage['core/Range.js'][75]++;
      start = (start.childNodes[startOffset] || (tmpStart = start.appendChild(doc.createTextNode(""))));
    }
    _$jscoverage['core/Range.js'][77]++;
    if ((end.nodeType == 1)) {
      _$jscoverage['core/Range.js'][78]++;
      end = (end.childNodes[endOffset] || (tmpEnd = end.appendChild(doc.createTextNode(""))));
    }
    _$jscoverage['core/Range.js'][80]++;
    if (((start === end) && (start.nodeType == 3))) {
      _$jscoverage['core/Range.js'][81]++;
      frag.appendChild(doc.createTextNode(start.substringData(startOffset, (endOffset - startOffset))));
      _$jscoverage['core/Range.js'][83]++;
      if (action) {
        _$jscoverage['core/Range.js'][84]++;
        start.deleteData(startOffset, (endOffset - startOffset));
        _$jscoverage['core/Range.js'][85]++;
        range.collapse(true);
      }
      _$jscoverage['core/Range.js'][87]++;
      return frag;
    }
    _$jscoverage['core/Range.js'][89]++;
    var current, currentLevel, clone = frag, startParents = domUtils.findParents(start, true), endParents = domUtils.findParents(end, true);
    _$jscoverage['core/Range.js'][91]++;
    for (var i = 0; (startParents[i] == endParents[i]);) {
      _$jscoverage['core/Range.js'][92]++;
      (i++);
}
    _$jscoverage['core/Range.js'][94]++;
    for (var j = i, si; (si = startParents[j]); (j++)) {
      _$jscoverage['core/Range.js'][95]++;
      current = si.nextSibling;
      _$jscoverage['core/Range.js'][96]++;
      if ((si == start)) {
        _$jscoverage['core/Range.js'][97]++;
        if ((! tmpStart)) {
          _$jscoverage['core/Range.js'][98]++;
          if ((range.startContainer.nodeType == 3)) {
            _$jscoverage['core/Range.js'][99]++;
            clone.appendChild(doc.createTextNode(start.nodeValue.slice(startOffset)));
            _$jscoverage['core/Range.js'][101]++;
            if (action) {
              _$jscoverage['core/Range.js'][102]++;
              start.deleteData(startOffset, (start.nodeValue.length - startOffset));
            }
          }
          else {
            _$jscoverage['core/Range.js'][105]++;
            clone.appendChild(((! action)? start.cloneNode(true): start));
          }
        }
      }
      else {
        _$jscoverage['core/Range.js'][109]++;
        currentLevel = si.cloneNode(false);
        _$jscoverage['core/Range.js'][110]++;
        clone.appendChild(currentLevel);
      }
      _$jscoverage['core/Range.js'][112]++;
      while (current) {
        _$jscoverage['core/Range.js'][113]++;
        if (((current === end) || (current === endParents[j]))) {
          _$jscoverage['core/Range.js'][114]++;
          break;
        }
        _$jscoverage['core/Range.js'][116]++;
        si = current.nextSibling;
        _$jscoverage['core/Range.js'][117]++;
        clone.appendChild(((! action)? current.cloneNode(true): current));
        _$jscoverage['core/Range.js'][118]++;
        current = si;
}
      _$jscoverage['core/Range.js'][120]++;
      clone = currentLevel;
}
    _$jscoverage['core/Range.js'][122]++;
    clone = frag;
    _$jscoverage['core/Range.js'][123]++;
    if ((! startParents[i])) {
      _$jscoverage['core/Range.js'][124]++;
      clone.appendChild(startParents[(i - 1)].cloneNode(false));
      _$jscoverage['core/Range.js'][125]++;
      clone = clone.firstChild;
    }
    _$jscoverage['core/Range.js'][127]++;
    for (var j = i, ei; (ei = endParents[j]); (j++)) {
      _$jscoverage['core/Range.js'][128]++;
      current = ei.previousSibling;
      _$jscoverage['core/Range.js'][129]++;
      if ((ei == end)) {
        _$jscoverage['core/Range.js'][130]++;
        if (((! tmpEnd) && (range.endContainer.nodeType == 3))) {
          _$jscoverage['core/Range.js'][131]++;
          clone.appendChild(doc.createTextNode(end.substringData(0, endOffset)));
          _$jscoverage['core/Range.js'][133]++;
          if (action) {
            _$jscoverage['core/Range.js'][134]++;
            end.deleteData(0, endOffset);
          }
        }
      }
      else {
        _$jscoverage['core/Range.js'][138]++;
        currentLevel = ei.cloneNode(false);
        _$jscoverage['core/Range.js'][139]++;
        clone.appendChild(currentLevel);
      }
      _$jscoverage['core/Range.js'][142]++;
      if (((j != i) || (! startParents[i]))) {
        _$jscoverage['core/Range.js'][143]++;
        while (current) {
          _$jscoverage['core/Range.js'][144]++;
          if ((current === start)) {
            _$jscoverage['core/Range.js'][145]++;
            break;
          }
          _$jscoverage['core/Range.js'][147]++;
          ei = current.previousSibling;
          _$jscoverage['core/Range.js'][148]++;
          clone.insertBefore(((! action)? current.cloneNode(true): current), clone.firstChild);
          _$jscoverage['core/Range.js'][149]++;
          current = ei;
}
      }
      _$jscoverage['core/Range.js'][152]++;
      clone = currentLevel;
}
    _$jscoverage['core/Range.js'][154]++;
    if (action) {
      _$jscoverage['core/Range.js'][155]++;
      range.setStartBefore(((! endParents[i])? endParents[(i - 1)]: ((! startParents[i])? startParents[(i - 1)]: endParents[i]))).collapse(true);
    }
    _$jscoverage['core/Range.js'][157]++;
    (tmpStart && domUtils.remove(tmpStart));
    _$jscoverage['core/Range.js'][158]++;
    (tmpEnd && domUtils.remove(tmpEnd));
    _$jscoverage['core/Range.js'][159]++;
    return frag;
}
  _$jscoverage['core/Range.js'][193]++;
  var Range = (dom.Range = (function (document) {
  _$jscoverage['core/Range.js'][194]++;
  var me = this;
  _$jscoverage['core/Range.js'][195]++;
  me.startContainer = (me.startOffset = (me.endContainer = (me.endOffset = null)));
  _$jscoverage['core/Range.js'][199]++;
  me.document = document;
  _$jscoverage['core/Range.js'][200]++;
  me.collapsed = true;
}));
  _$jscoverage['core/Range.js'][208]++;
  function removeFillData(doc, excludeNode) {
    _$jscoverage['core/Range.js'][209]++;
    try {
      _$jscoverage['core/Range.js'][210]++;
      if ((fillData && domUtils.inDoc(fillData, doc))) {
        _$jscoverage['core/Range.js'][211]++;
        if ((! fillData.nodeValue.replace(fillCharReg, "").length)) {
          _$jscoverage['core/Range.js'][212]++;
          var tmpNode = fillData.parentNode;
          _$jscoverage['core/Range.js'][213]++;
          domUtils.remove(fillData);
          _$jscoverage['core/Range.js'][214]++;
          while ((tmpNode && domUtils.isEmptyInlineElement(tmpNode) && (browser.safari? (! (domUtils.getPosition(tmpNode, excludeNode) & domUtils.POSITION_CONTAINS)): (! tmpNode.contains(excludeNode))))) {
            _$jscoverage['core/Range.js'][218]++;
            fillData = tmpNode.parentNode;
            _$jscoverage['core/Range.js'][219]++;
            domUtils.remove(tmpNode);
            _$jscoverage['core/Range.js'][220]++;
            tmpNode = fillData;
}
        }
        else {
          _$jscoverage['core/Range.js'][223]++;
          fillData.nodeValue = fillData.nodeValue.replace(fillCharReg, "");
        }
      }
    }
    catch (e) {
    }
}
  _$jscoverage['core/Range.js'][235]++;
  function mergeSibling(node, dir) {
    _$jscoverage['core/Range.js'][236]++;
    var tmpNode;
    _$jscoverage['core/Range.js'][237]++;
    node = node[dir];
    _$jscoverage['core/Range.js'][238]++;
    while ((node && domUtils.isFillChar(node))) {
      _$jscoverage['core/Range.js'][239]++;
      tmpNode = node[dir];
      _$jscoverage['core/Range.js'][240]++;
      domUtils.remove(node);
      _$jscoverage['core/Range.js'][241]++;
      node = tmpNode;
}
}
  _$jscoverage['core/Range.js'][245]++;
  Range.prototype = {cloneContents: (function () {
  _$jscoverage['core/Range.js'][263]++;
  return (this.collapsed? null: execContentsAction(this, 0));
}), deleteContents: (function () {
  _$jscoverage['core/Range.js'][294]++;
  var txt;
  _$jscoverage['core/Range.js'][295]++;
  if ((! this.collapsed)) {
    _$jscoverage['core/Range.js'][296]++;
    execContentsAction(this, 1);
  }
  _$jscoverage['core/Range.js'][298]++;
  if (browser.webkit) {
    _$jscoverage['core/Range.js'][299]++;
    txt = this.startContainer;
    _$jscoverage['core/Range.js'][300]++;
    if (((txt.nodeType == 3) && (! txt.nodeValue.length))) {
      _$jscoverage['core/Range.js'][301]++;
      this.setStartBefore(txt).collapse(true);
      _$jscoverage['core/Range.js'][302]++;
      domUtils.remove(txt);
    }
  }
  _$jscoverage['core/Range.js'][305]++;
  return this;
}), extractContents: (function () {
  _$jscoverage['core/Range.js'][338]++;
  return (this.collapsed? null: execContentsAction(this, 2));
}), setStart: (function (node, offset) {
  _$jscoverage['core/Range.js'][373]++;
  return setEndPoint(true, node, offset, this);
}), setEnd: (function (node, offset) {
  _$jscoverage['core/Range.js'][407]++;
  return setEndPoint(false, node, offset, this);
}), setStartAfter: (function (node) {
  _$jscoverage['core/Range.js'][440]++;
  return this.setStart(node.parentNode, (domUtils.getNodeIndex(node) + 1));
}), setStartBefore: (function (node) {
  _$jscoverage['core/Range.js'][473]++;
  return this.setStart(node.parentNode, domUtils.getNodeIndex(node));
}), setEndAfter: (function (node) {
  _$jscoverage['core/Range.js'][504]++;
  return this.setEnd(node.parentNode, (domUtils.getNodeIndex(node) + 1));
}), setEndBefore: (function (node) {
  _$jscoverage['core/Range.js'][535]++;
  return this.setEnd(node.parentNode, domUtils.getNodeIndex(node));
}), setStartAtFirst: (function (node) {
  _$jscoverage['core/Range.js'][568]++;
  return this.setStart(node, 0);
}), setStartAtLast: (function (node) {
  _$jscoverage['core/Range.js'][602]++;
  return this.setStart(node, ((node.nodeType == 3)? node.nodeValue.length: node.childNodes.length));
}), setEndAtFirst: (function (node) {
  _$jscoverage['core/Range.js'][633]++;
  return this.setEnd(node, 0);
}), setEndAtLast: (function (node) {
  _$jscoverage['core/Range.js'][665]++;
  return this.setEnd(node, ((node.nodeType == 3)? node.nodeValue.length: node.childNodes.length));
}), selectNode: (function (node) {
  _$jscoverage['core/Range.js'][691]++;
  return this.setStartBefore(node).setEndAfter(node);
}), selectNodeContents: (function (node) {
  _$jscoverage['core/Range.js'][720]++;
  return this.setStart(node, 0).setEndAtLast(node);
}), cloneRange: (function () {
  _$jscoverage['core/Range.js'][750]++;
  var me = this;
  _$jscoverage['core/Range.js'][751]++;
  return new Range(me.document).setStart(me.startContainer, me.startOffset).setEnd(me.endContainer, me.endOffset);
}), collapse: (function (toStart) {
  _$jscoverage['core/Range.js'][824]++;
  var me = this;
  _$jscoverage['core/Range.js'][825]++;
  if (toStart) {
    _$jscoverage['core/Range.js'][826]++;
    me.endContainer = me.startContainer;
    _$jscoverage['core/Range.js'][827]++;
    me.endOffset = me.startOffset;
  }
  else {
    _$jscoverage['core/Range.js'][829]++;
    me.startContainer = me.endContainer;
    _$jscoverage['core/Range.js'][830]++;
    me.startOffset = me.endOffset;
  }
  _$jscoverage['core/Range.js'][832]++;
  me.collapsed = true;
  _$jscoverage['core/Range.js'][833]++;
  return me;
}), shrinkBoundary: (function (ignoreEnd) {
  _$jscoverage['core/Range.js'][880]++;
  var me = this, child, collapsed = me.collapsed;
  _$jscoverage['core/Range.js'][882]++;
  function check(node) {
    _$jscoverage['core/Range.js'][883]++;
    return ((node.nodeType == 1) && (! domUtils.isBookmarkNode(node)) && (! dtd.$empty[node.tagName]) && (! dtd.$nonChild[node.tagName]));
}
  _$jscoverage['core/Range.js'][885]++;
  while (((me.startContainer.nodeType == 1) && (child = me.startContainer.childNodes[me.startOffset]) && check(child))) {
    _$jscoverage['core/Range.js'][888]++;
    me.setStart(child, 0);
}
  _$jscoverage['core/Range.js'][890]++;
  if (collapsed) {
    _$jscoverage['core/Range.js'][891]++;
    return me.collapse(true);
  }
  _$jscoverage['core/Range.js'][893]++;
  if ((! ignoreEnd)) {
    _$jscoverage['core/Range.js'][894]++;
    while (((me.endContainer.nodeType == 1) && (me.endOffset > 0) && (child = me.endContainer.childNodes[(me.endOffset - 1)]) && check(child))) {
      _$jscoverage['core/Range.js'][898]++;
      me.setEnd(child, child.childNodes.length);
}
  }
  _$jscoverage['core/Range.js'][901]++;
  return me;
}), getCommonAncestor: (function (includeSelf, ignoreTextNode) {
  _$jscoverage['core/Range.js'][1043]++;
  var me = this, start = me.startContainer, end = me.endContainer;
  _$jscoverage['core/Range.js'][1046]++;
  if ((start === end)) {
    _$jscoverage['core/Range.js'][1047]++;
    if ((includeSelf && selectOneNode(this))) {
      _$jscoverage['core/Range.js'][1048]++;
      start = start.childNodes[me.startOffset];
      _$jscoverage['core/Range.js'][1049]++;
      if ((start.nodeType == 1)) {
        _$jscoverage['core/Range.js'][1050]++;
        return start;
      }
    }
    _$jscoverage['core/Range.js'][1053]++;
    return ((ignoreTextNode && (start.nodeType == 3))? start.parentNode: start);
  }
  _$jscoverage['core/Range.js'][1055]++;
  return domUtils.getCommonAncestor(start, end);
}), trimBoundary: (function (ignoreEnd) {
  _$jscoverage['core/Range.js'][1132]++;
  this.txtToElmBoundary();
  _$jscoverage['core/Range.js'][1133]++;
  var start = this.startContainer, offset = this.startOffset, collapsed = this.collapsed, end = this.endContainer;
  _$jscoverage['core/Range.js'][1137]++;
  if ((start.nodeType == 3)) {
    _$jscoverage['core/Range.js'][1138]++;
    if ((offset == 0)) {
      _$jscoverage['core/Range.js'][1139]++;
      this.setStartBefore(start);
    }
    else {
      _$jscoverage['core/Range.js'][1141]++;
      if ((offset >= start.nodeValue.length)) {
        _$jscoverage['core/Range.js'][1142]++;
        this.setStartAfter(start);
      }
      else {
        _$jscoverage['core/Range.js'][1144]++;
        var textNode = domUtils.split(start, offset);
        _$jscoverage['core/Range.js'][1146]++;
        if ((start === end)) {
          _$jscoverage['core/Range.js'][1147]++;
          this.setEnd(textNode, (this.endOffset - offset));
        }
        else {
          _$jscoverage['core/Range.js'][1148]++;
          if ((start.parentNode === end)) {
            _$jscoverage['core/Range.js'][1149]++;
            this.endOffset += 1;
          }
        }
        _$jscoverage['core/Range.js'][1151]++;
        this.setStartBefore(textNode);
      }
    }
    _$jscoverage['core/Range.js'][1154]++;
    if (collapsed) {
      _$jscoverage['core/Range.js'][1155]++;
      return this.collapse(true);
    }
  }
  _$jscoverage['core/Range.js'][1158]++;
  if ((! ignoreEnd)) {
    _$jscoverage['core/Range.js'][1159]++;
    offset = this.endOffset;
    _$jscoverage['core/Range.js'][1160]++;
    end = this.endContainer;
    _$jscoverage['core/Range.js'][1161]++;
    if ((end.nodeType == 3)) {
      _$jscoverage['core/Range.js'][1162]++;
      if ((offset == 0)) {
        _$jscoverage['core/Range.js'][1163]++;
        this.setEndBefore(end);
      }
      else {
        _$jscoverage['core/Range.js'][1165]++;
        ((offset < end.nodeValue.length) && domUtils.split(end, offset));
        _$jscoverage['core/Range.js'][1166]++;
        this.setEndAfter(end);
      }
    }
  }
  _$jscoverage['core/Range.js'][1170]++;
  return this;
}), txtToElmBoundary: (function (ignoreCollapsed) {
  _$jscoverage['core/Range.js'][1302]++;
  function adjust(r, c) {
    _$jscoverage['core/Range.js'][1303]++;
    var container = r[(c + "Container")], offset = r[(c + "Offset")];
    _$jscoverage['core/Range.js'][1305]++;
    if ((container.nodeType == 3)) {
      _$jscoverage['core/Range.js'][1306]++;
      if ((! offset)) {
        _$jscoverage['core/Range.js'][1307]++;
        (r[("set" + c.replace(/(\w)/, (function (a) {
  _$jscoverage['core/Range.js'][1308]++;
  return a.toUpperCase();
})) + "Before")])(container);
      }
      else {
        _$jscoverage['core/Range.js'][1310]++;
        if ((offset >= container.nodeValue.length)) {
          _$jscoverage['core/Range.js'][1311]++;
          (r[("set" + c.replace(/(\w)/, (function (a) {
  _$jscoverage['core/Range.js'][1312]++;
  return a.toUpperCase();
})) + "After")])(container);
        }
      }
    }
}
  _$jscoverage['core/Range.js'][1318]++;
  if ((ignoreCollapsed || (! this.collapsed))) {
    _$jscoverage['core/Range.js'][1319]++;
    adjust(this, "start");
    _$jscoverage['core/Range.js'][1320]++;
    adjust(this, "end");
  }
  _$jscoverage['core/Range.js'][1322]++;
  return this;
}), insertNode: (function (node) {
  _$jscoverage['core/Range.js'][1361]++;
  var first = node, length = 1;
  _$jscoverage['core/Range.js'][1362]++;
  if ((node.nodeType == 11)) {
    _$jscoverage['core/Range.js'][1363]++;
    first = node.firstChild;
    _$jscoverage['core/Range.js'][1364]++;
    length = node.childNodes.length;
  }
  _$jscoverage['core/Range.js'][1366]++;
  this.trimBoundary(true);
  _$jscoverage['core/Range.js'][1367]++;
  var start = this.startContainer, offset = this.startOffset;
  _$jscoverage['core/Range.js'][1369]++;
  var nextNode = start.childNodes[offset];
  _$jscoverage['core/Range.js'][1370]++;
  if (nextNode) {
    _$jscoverage['core/Range.js'][1371]++;
    start.insertBefore(node, nextNode);
  }
  else {
    _$jscoverage['core/Range.js'][1373]++;
    start.appendChild(node);
  }
  _$jscoverage['core/Range.js'][1375]++;
  if ((first.parentNode === this.endContainer)) {
    _$jscoverage['core/Range.js'][1376]++;
    this.endOffset = (this.endOffset + length);
  }
  _$jscoverage['core/Range.js'][1378]++;
  return this.setStartBefore(first);
}), setCursor: (function (toEnd, noFillData) {
  _$jscoverage['core/Range.js'][1397]++;
  return this.collapse((! toEnd)).select(noFillData);
}), createBookmark: (function (serialize, same) {
  _$jscoverage['core/Range.js'][1410]++;
  var endNode, startNode = this.document.createElement("span");
  _$jscoverage['core/Range.js'][1412]++;
  startNode.style.cssText = "display:none;line-height:0px;";
  _$jscoverage['core/Range.js'][1413]++;
  startNode.appendChild(this.document.createTextNode("\u200d"));
  _$jscoverage['core/Range.js'][1414]++;
  startNode.id = ("_baidu_bookmark_start_" + (same? "": (guid++)));
  _$jscoverage['core/Range.js'][1416]++;
  if ((! this.collapsed)) {
    _$jscoverage['core/Range.js'][1417]++;
    endNode = startNode.cloneNode(true);
    _$jscoverage['core/Range.js'][1418]++;
    endNode.id = ("_baidu_bookmark_end_" + (same? "": (guid++)));
  }
  _$jscoverage['core/Range.js'][1420]++;
  this.insertNode(startNode);
  _$jscoverage['core/Range.js'][1421]++;
  if (endNode) {
    _$jscoverage['core/Range.js'][1422]++;
    this.collapse().insertNode(endNode).setEndBefore(endNode);
  }
  _$jscoverage['core/Range.js'][1424]++;
  this.setStartAfter(startNode);
  _$jscoverage['core/Range.js'][1425]++;
  return ({start: (serialize? startNode.id: startNode), end: (endNode? (serialize? endNode.id: endNode): null), id: serialize});
}), moveToBookmark: (function (bookmark) {
  _$jscoverage['core/Range.js'][1440]++;
  var start = (bookmark.id? this.document.getElementById(bookmark.start): bookmark.start), end = ((bookmark.end && bookmark.id)? this.document.getElementById(bookmark.end): bookmark.end);
  _$jscoverage['core/Range.js'][1442]++;
  this.setStartBefore(start);
  _$jscoverage['core/Range.js'][1443]++;
  domUtils.remove(start);
  _$jscoverage['core/Range.js'][1444]++;
  if (end) {
    _$jscoverage['core/Range.js'][1445]++;
    this.setEndBefore(end);
    _$jscoverage['core/Range.js'][1446]++;
    domUtils.remove(end);
  }
  else {
    _$jscoverage['core/Range.js'][1448]++;
    this.collapse(true);
  }
  _$jscoverage['core/Range.js'][1450]++;
  return this;
}), enlarge: (function (toBlock, stopFn) {
  _$jscoverage['core/Range.js'][1511]++;
  var isBody = domUtils.isBody, pre, node, tmp = this.document.createTextNode("");
  _$jscoverage['core/Range.js'][1513]++;
  if (toBlock) {
    _$jscoverage['core/Range.js'][1514]++;
    node = this.startContainer;
    _$jscoverage['core/Range.js'][1515]++;
    if ((node.nodeType == 1)) {
      _$jscoverage['core/Range.js'][1516]++;
      if (node.childNodes[this.startOffset]) {
        _$jscoverage['core/Range.js'][1517]++;
        pre = (node = node.childNodes[this.startOffset]);
      }
      else {
        _$jscoverage['core/Range.js'][1519]++;
        node.appendChild(tmp);
        _$jscoverage['core/Range.js'][1520]++;
        pre = (node = tmp);
      }
    }
    else {
      _$jscoverage['core/Range.js'][1523]++;
      pre = node;
    }
    _$jscoverage['core/Range.js'][1525]++;
    while (true) {
      _$jscoverage['core/Range.js'][1526]++;
      if (domUtils.isBlockElm(node)) {
        _$jscoverage['core/Range.js'][1527]++;
        node = pre;
        _$jscoverage['core/Range.js'][1528]++;
        while (((pre = node.previousSibling) && (! domUtils.isBlockElm(pre)))) {
          _$jscoverage['core/Range.js'][1529]++;
          node = pre;
}
        _$jscoverage['core/Range.js'][1531]++;
        this.setStartBefore(node);
        _$jscoverage['core/Range.js'][1532]++;
        break;
      }
      _$jscoverage['core/Range.js'][1534]++;
      pre = node;
      _$jscoverage['core/Range.js'][1535]++;
      node = node.parentNode;
}
    _$jscoverage['core/Range.js'][1537]++;
    node = this.endContainer;
    _$jscoverage['core/Range.js'][1538]++;
    if ((node.nodeType == 1)) {
      _$jscoverage['core/Range.js'][1539]++;
      if ((pre = node.childNodes[this.endOffset])) {
        _$jscoverage['core/Range.js'][1540]++;
        node.insertBefore(tmp, pre);
      }
      else {
        _$jscoverage['core/Range.js'][1542]++;
        node.appendChild(tmp);
      }
      _$jscoverage['core/Range.js'][1544]++;
      pre = (node = tmp);
    }
    else {
      _$jscoverage['core/Range.js'][1546]++;
      pre = node;
    }
    _$jscoverage['core/Range.js'][1548]++;
    while (true) {
      _$jscoverage['core/Range.js'][1549]++;
      if (domUtils.isBlockElm(node)) {
        _$jscoverage['core/Range.js'][1550]++;
        node = pre;
        _$jscoverage['core/Range.js'][1551]++;
        while (((pre = node.nextSibling) && (! domUtils.isBlockElm(pre)))) {
          _$jscoverage['core/Range.js'][1552]++;
          node = pre;
}
        _$jscoverage['core/Range.js'][1554]++;
        this.setEndAfter(node);
        _$jscoverage['core/Range.js'][1555]++;
        break;
      }
      _$jscoverage['core/Range.js'][1557]++;
      pre = node;
      _$jscoverage['core/Range.js'][1558]++;
      node = node.parentNode;
}
    _$jscoverage['core/Range.js'][1560]++;
    if ((tmp.parentNode === this.endContainer)) {
      _$jscoverage['core/Range.js'][1561]++;
      (this.endOffset--);
    }
    _$jscoverage['core/Range.js'][1563]++;
    domUtils.remove(tmp);
  }
  _$jscoverage['core/Range.js'][1567]++;
  if ((! this.collapsed)) {
    _$jscoverage['core/Range.js'][1568]++;
    while ((this.startOffset == 0)) {
      _$jscoverage['core/Range.js'][1569]++;
      if ((stopFn && stopFn(this.startContainer))) {
        _$jscoverage['core/Range.js'][1570]++;
        break;
      }
      _$jscoverage['core/Range.js'][1572]++;
      if (isBody(this.startContainer)) {
        _$jscoverage['core/Range.js'][1573]++;
        break;
      }
      _$jscoverage['core/Range.js'][1575]++;
      this.setStartBefore(this.startContainer);
}
    _$jscoverage['core/Range.js'][1577]++;
    while ((this.endOffset == ((this.endContainer.nodeType == 1)? this.endContainer.childNodes.length: this.endContainer.nodeValue.length))) {
      _$jscoverage['core/Range.js'][1578]++;
      if ((stopFn && stopFn(this.endContainer))) {
        _$jscoverage['core/Range.js'][1579]++;
        break;
      }
      _$jscoverage['core/Range.js'][1581]++;
      if (isBody(this.endContainer)) {
        _$jscoverage['core/Range.js'][1582]++;
        break;
      }
      _$jscoverage['core/Range.js'][1584]++;
      this.setEndAfter(this.endContainer);
}
  }
  _$jscoverage['core/Range.js'][1587]++;
  return this;
}), adjustmentBoundary: (function () {
  _$jscoverage['core/Range.js'][1597]++;
  if ((! this.collapsed)) {
    _$jscoverage['core/Range.js'][1598]++;
    while (((! domUtils.isBody(this.startContainer)) && (this.startOffset == this.startContainer[((this.startContainer.nodeType == 3)? "nodeValue": "childNodes")].length) && this.startContainer[((this.startContainer.nodeType == 3)? "nodeValue": "childNodes")].length)) {
      _$jscoverage['core/Range.js'][1603]++;
      this.setStartAfter(this.startContainer);
}
    _$jscoverage['core/Range.js'][1605]++;
    while (((! domUtils.isBody(this.endContainer)) && (! this.endOffset) && this.endContainer[((this.endContainer.nodeType == 3)? "nodeValue": "childNodes")].length)) {
      _$jscoverage['core/Range.js'][1608]++;
      this.setEndBefore(this.endContainer);
}
  }
  _$jscoverage['core/Range.js'][1611]++;
  return this;
}), applyInlineStyle: (function (tagName, attrs, list) {
  _$jscoverage['core/Range.js'][1624]++;
  if (this.collapsed) {
    _$jscoverage['core/Range.js'][1624]++;
    return this;
  }
  _$jscoverage['core/Range.js'][1625]++;
  this.trimBoundary().enlarge(false, (function (node) {
  _$jscoverage['core/Range.js'][1627]++;
  return ((node.nodeType == 1) && domUtils.isBlockElm(node));
})).adjustmentBoundary();
  _$jscoverage['core/Range.js'][1629]++;
  var bookmark = this.createBookmark(), end = bookmark.end, filterFn = (function (node) {
  _$jscoverage['core/Range.js'][1632]++;
  return ((node.nodeType == 1)? (node.tagName.toLowerCase() != "br"): (! domUtils.isWhitespace(node)));
}), current = domUtils.getNextDomNode(bookmark.start, false, filterFn), node, pre, range = this.cloneRange();
  _$jscoverage['core/Range.js'][1638]++;
  while ((current && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING))) {
    _$jscoverage['core/Range.js'][1639]++;
    if (((current.nodeType == 3) || dtd[tagName][current.tagName])) {
      _$jscoverage['core/Range.js'][1640]++;
      range.setStartBefore(current);
      _$jscoverage['core/Range.js'][1641]++;
      node = current;
      _$jscoverage['core/Range.js'][1642]++;
      while ((node && ((node.nodeType == 3) || dtd[tagName][node.tagName]) && (node !== end))) {
        _$jscoverage['core/Range.js'][1643]++;
        pre = node;
        _$jscoverage['core/Range.js'][1644]++;
        node = domUtils.getNextDomNode(node, (node.nodeType == 1), null, (function (parent) {
  _$jscoverage['core/Range.js'][1645]++;
  return dtd[tagName][parent.tagName];
}));
}
      _$jscoverage['core/Range.js'][1648]++;
      var frag = range.setEndAfter(pre).extractContents(), elm;
      _$jscoverage['core/Range.js'][1649]++;
      if ((list && (list.length > 0))) {
        _$jscoverage['core/Range.js'][1650]++;
        var level, top;
        _$jscoverage['core/Range.js'][1651]++;
        top = (level = list[0].cloneNode(false));
        _$jscoverage['core/Range.js'][1652]++;
        for (var i = 1, ci; (ci = list[(i++)]);) {
          _$jscoverage['core/Range.js'][1653]++;
          level.appendChild(ci.cloneNode(false));
          _$jscoverage['core/Range.js'][1654]++;
          level = level.firstChild;
}
        _$jscoverage['core/Range.js'][1656]++;
        elm = level;
      }
      else {
        _$jscoverage['core/Range.js'][1658]++;
        elm = range.document.createElement(tagName);
      }
      _$jscoverage['core/Range.js'][1660]++;
      if (attrs) {
        _$jscoverage['core/Range.js'][1661]++;
        domUtils.setAttributes(elm, attrs);
      }
      _$jscoverage['core/Range.js'][1663]++;
      elm.appendChild(frag);
      _$jscoverage['core/Range.js'][1664]++;
      range.insertNode((list? top: elm));
      _$jscoverage['core/Range.js'][1666]++;
      var aNode;
      _$jscoverage['core/Range.js'][1667]++;
      if (((tagName == "span") && attrs.style && /text\-decoration/.test(attrs.style) && (aNode = domUtils.findParentByTagName(elm, "a", true)))) {
        _$jscoverage['core/Range.js'][1668]++;
        domUtils.setAttributes(aNode, attrs);
        _$jscoverage['core/Range.js'][1669]++;
        domUtils.remove(elm, true);
        _$jscoverage['core/Range.js'][1670]++;
        elm = aNode;
      }
      else {
        _$jscoverage['core/Range.js'][1672]++;
        domUtils.mergeSibling(elm);
        _$jscoverage['core/Range.js'][1673]++;
        domUtils.clearEmptySibling(elm);
      }
      _$jscoverage['core/Range.js'][1676]++;
      domUtils.mergeChild(elm, attrs);
      _$jscoverage['core/Range.js'][1677]++;
      current = domUtils.getNextDomNode(elm, false, filterFn);
      _$jscoverage['core/Range.js'][1678]++;
      domUtils.mergeToParent(elm);
      _$jscoverage['core/Range.js'][1679]++;
      if ((node === end)) {
        _$jscoverage['core/Range.js'][1680]++;
        break;
      }
    }
    else {
      _$jscoverage['core/Range.js'][1683]++;
      current = domUtils.getNextDomNode(current, true, filterFn);
    }
}
  _$jscoverage['core/Range.js'][1686]++;
  return this.moveToBookmark(bookmark);
}), removeInlineStyle: (function (tagNames) {
  _$jscoverage['core/Range.js'][1696]++;
  if (this.collapsed) {
    _$jscoverage['core/Range.js'][1696]++;
    return this;
  }
  _$jscoverage['core/Range.js'][1697]++;
  tagNames = (utils.isArray(tagNames)? tagNames: [tagNames]);
  _$jscoverage['core/Range.js'][1698]++;
  this.shrinkBoundary().adjustmentBoundary();
  _$jscoverage['core/Range.js'][1699]++;
  var start = this.startContainer, end = this.endContainer;
  _$jscoverage['core/Range.js'][1700]++;
  while (true) {
    _$jscoverage['core/Range.js'][1701]++;
    if ((start.nodeType == 1)) {
      _$jscoverage['core/Range.js'][1702]++;
      if ((utils.indexOf(tagNames, start.tagName.toLowerCase()) > -1)) {
        _$jscoverage['core/Range.js'][1703]++;
        break;
      }
      _$jscoverage['core/Range.js'][1705]++;
      if ((start.tagName.toLowerCase() == "body")) {
        _$jscoverage['core/Range.js'][1706]++;
        start = null;
        _$jscoverage['core/Range.js'][1707]++;
        break;
      }
    }
    _$jscoverage['core/Range.js'][1710]++;
    start = start.parentNode;
}
  _$jscoverage['core/Range.js'][1712]++;
  while (true) {
    _$jscoverage['core/Range.js'][1713]++;
    if ((end.nodeType == 1)) {
      _$jscoverage['core/Range.js'][1714]++;
      if ((utils.indexOf(tagNames, end.tagName.toLowerCase()) > -1)) {
        _$jscoverage['core/Range.js'][1715]++;
        break;
      }
      _$jscoverage['core/Range.js'][1717]++;
      if ((end.tagName.toLowerCase() == "body")) {
        _$jscoverage['core/Range.js'][1718]++;
        end = null;
        _$jscoverage['core/Range.js'][1719]++;
        break;
      }
    }
    _$jscoverage['core/Range.js'][1722]++;
    end = end.parentNode;
}
  _$jscoverage['core/Range.js'][1724]++;
  var bookmark = this.createBookmark(), frag, tmpRange;
  _$jscoverage['core/Range.js'][1727]++;
  if (start) {
    _$jscoverage['core/Range.js'][1728]++;
    tmpRange = this.cloneRange().setEndBefore(bookmark.start).setStartBefore(start);
    _$jscoverage['core/Range.js'][1729]++;
    frag = tmpRange.extractContents();
    _$jscoverage['core/Range.js'][1730]++;
    tmpRange.insertNode(frag);
    _$jscoverage['core/Range.js'][1731]++;
    domUtils.clearEmptySibling(start, true);
    _$jscoverage['core/Range.js'][1732]++;
    start.parentNode.insertBefore(bookmark.start, start);
  }
  _$jscoverage['core/Range.js'][1734]++;
  if (end) {
    _$jscoverage['core/Range.js'][1735]++;
    tmpRange = this.cloneRange().setStartAfter(bookmark.end).setEndAfter(end);
    _$jscoverage['core/Range.js'][1736]++;
    frag = tmpRange.extractContents();
    _$jscoverage['core/Range.js'][1737]++;
    tmpRange.insertNode(frag);
    _$jscoverage['core/Range.js'][1738]++;
    domUtils.clearEmptySibling(end, false, true);
    _$jscoverage['core/Range.js'][1739]++;
    end.parentNode.insertBefore(bookmark.end, end.nextSibling);
  }
  _$jscoverage['core/Range.js'][1741]++;
  var current = domUtils.getNextDomNode(bookmark.start, false, (function (node) {
  _$jscoverage['core/Range.js'][1742]++;
  return (node.nodeType == 1);
})), next;
  _$jscoverage['core/Range.js'][1744]++;
  while ((current && (current !== bookmark.end))) {
    _$jscoverage['core/Range.js'][1745]++;
    next = domUtils.getNextDomNode(current, true, (function (node) {
  _$jscoverage['core/Range.js'][1746]++;
  return (node.nodeType == 1);
}));
    _$jscoverage['core/Range.js'][1748]++;
    if ((utils.indexOf(tagNames, current.tagName.toLowerCase()) > -1)) {
      _$jscoverage['core/Range.js'][1749]++;
      domUtils.remove(current, true);
    }
    _$jscoverage['core/Range.js'][1751]++;
    current = next;
}
  _$jscoverage['core/Range.js'][1753]++;
  return this.moveToBookmark(bookmark);
}), getClosedNode: (function () {
  _$jscoverage['core/Range.js'][1783]++;
  var node;
  _$jscoverage['core/Range.js'][1784]++;
  if ((! this.collapsed)) {
    _$jscoverage['core/Range.js'][1785]++;
    var range = this.cloneRange().adjustmentBoundary().shrinkBoundary();
    _$jscoverage['core/Range.js'][1786]++;
    if (selectOneNode(range)) {
      _$jscoverage['core/Range.js'][1787]++;
      var child = range.startContainer.childNodes[range.startOffset];
      _$jscoverage['core/Range.js'][1788]++;
      if ((child && (child.nodeType == 1) && (dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName]))) {
        _$jscoverage['core/Range.js'][1789]++;
        node = child;
      }
    }
  }
  _$jscoverage['core/Range.js'][1793]++;
  return node;
}), select: (browser.ie? (function (noFillData, textRange) {
  _$jscoverage['core/Range.js'][1802]++;
  var nativeRange;
  _$jscoverage['core/Range.js'][1803]++;
  if ((! this.collapsed)) {
    _$jscoverage['core/Range.js'][1804]++;
    this.shrinkBoundary();
  }
  _$jscoverage['core/Range.js'][1805]++;
  var node = this.getClosedNode();
  _$jscoverage['core/Range.js'][1806]++;
  if ((node && (! textRange))) {
    _$jscoverage['core/Range.js'][1807]++;
    try {
      _$jscoverage['core/Range.js'][1808]++;
      nativeRange = this.document.body.createControlRange();
      _$jscoverage['core/Range.js'][1809]++;
      nativeRange.addElement(node);
      _$jscoverage['core/Range.js'][1810]++;
      nativeRange.select();
    }
    catch (e) {
    }
    _$jscoverage['core/Range.js'][1812]++;
    return this;
  }
  _$jscoverage['core/Range.js'][1814]++;
  var bookmark = this.createBookmark(), start = bookmark.start, end;
  _$jscoverage['core/Range.js'][1817]++;
  nativeRange = this.document.body.createTextRange();
  _$jscoverage['core/Range.js'][1818]++;
  nativeRange.moveToElementText(start);
  _$jscoverage['core/Range.js'][1819]++;
  nativeRange.moveStart("character", 1);
  _$jscoverage['core/Range.js'][1820]++;
  if ((! this.collapsed)) {
    _$jscoverage['core/Range.js'][1821]++;
    var nativeRangeEnd = this.document.body.createTextRange();
    _$jscoverage['core/Range.js'][1822]++;
    end = bookmark.end;
    _$jscoverage['core/Range.js'][1823]++;
    nativeRangeEnd.moveToElementText(end);
    _$jscoverage['core/Range.js'][1824]++;
    nativeRange.setEndPoint("EndToEnd", nativeRangeEnd);
  }
  else {
    _$jscoverage['core/Range.js'][1826]++;
    if (((! noFillData) && (this.startContainer.nodeType != 3))) {
      _$jscoverage['core/Range.js'][1828]++;
      var tmpText = this.document.createTextNode(fillChar), tmp = this.document.createElement("span");
      _$jscoverage['core/Range.js'][1830]++;
      tmp.appendChild(this.document.createTextNode(fillChar));
      _$jscoverage['core/Range.js'][1831]++;
      start.parentNode.insertBefore(tmp, start);
      _$jscoverage['core/Range.js'][1832]++;
      start.parentNode.insertBefore(tmpText, start);
      _$jscoverage['core/Range.js'][1834]++;
      removeFillData(this.document, tmpText);
      _$jscoverage['core/Range.js'][1835]++;
      fillData = tmpText;
      _$jscoverage['core/Range.js'][1836]++;
      mergeSibling(tmp, "previousSibling");
      _$jscoverage['core/Range.js'][1837]++;
      mergeSibling(start, "nextSibling");
      _$jscoverage['core/Range.js'][1838]++;
      nativeRange.moveStart("character", -1);
      _$jscoverage['core/Range.js'][1839]++;
      nativeRange.collapse(true);
    }
  }
  _$jscoverage['core/Range.js'][1842]++;
  this.moveToBookmark(bookmark);
  _$jscoverage['core/Range.js'][1843]++;
  (tmp && domUtils.remove(tmp));
  _$jscoverage['core/Range.js'][1845]++;
  try {
    _$jscoverage['core/Range.js'][1846]++;
    nativeRange.select();
  }
  catch (e) {
  }
  _$jscoverage['core/Range.js'][1849]++;
  return this;
}): (function (notInsertFillData) {
  _$jscoverage['core/Range.js'][1851]++;
  function checkOffset(rng) {
    _$jscoverage['core/Range.js'][1853]++;
    function check(node, offset, dir) {
      _$jscoverage['core/Range.js'][1854]++;
      if (((node.nodeType == 3) && (node.nodeValue.length < offset))) {
        _$jscoverage['core/Range.js'][1855]++;
        rng[(dir + "Offset")] = node.nodeValue.length;
      }
}
    _$jscoverage['core/Range.js'][1858]++;
    check(rng.startContainer, rng.startOffset, "start");
    _$jscoverage['core/Range.js'][1859]++;
    check(rng.endContainer, rng.endOffset, "end");
}
  _$jscoverage['core/Range.js'][1861]++;
  var win = domUtils.getWindow(this.document), sel = win.getSelection(), txtNode;
  _$jscoverage['core/Range.js'][1866]++;
  (browser.gecko? this.document.body.focus(): win.focus());
  _$jscoverage['core/Range.js'][1867]++;
  if (sel) {
    _$jscoverage['core/Range.js'][1868]++;
    sel.removeAllRanges();
    _$jscoverage['core/Range.js'][1871]++;
    if ((this.collapsed && (! notInsertFillData))) {
      _$jscoverage['core/Range.js'][1883]++;
      var start = this.startContainer, child = start;
      _$jscoverage['core/Range.js'][1884]++;
      if ((start.nodeType == 1)) {
        _$jscoverage['core/Range.js'][1885]++;
        child = start.childNodes[this.startOffset];
      }
      _$jscoverage['core/Range.js'][1888]++;
      if (((! ((start.nodeType == 3) && this.startOffset)) && (child? ((! child.previousSibling) || (child.previousSibling.nodeType != 3)): ((! start.lastChild) || (start.lastChild.nodeType != 3))))) {
        _$jscoverage['core/Range.js'][1895]++;
        txtNode = this.document.createTextNode(fillChar);
        _$jscoverage['core/Range.js'][1897]++;
        this.insertNode(txtNode);
        _$jscoverage['core/Range.js'][1898]++;
        removeFillData(this.document, txtNode);
        _$jscoverage['core/Range.js'][1899]++;
        mergeSibling(txtNode, "previousSibling");
        _$jscoverage['core/Range.js'][1900]++;
        mergeSibling(txtNode, "nextSibling");
        _$jscoverage['core/Range.js'][1901]++;
        fillData = txtNode;
        _$jscoverage['core/Range.js'][1902]++;
        this.setStart(txtNode, (browser.webkit? 1: 0)).collapse(true);
      }
    }
    _$jscoverage['core/Range.js'][1905]++;
    var nativeRange = this.document.createRange();
    _$jscoverage['core/Range.js'][1906]++;
    if ((this.collapsed && browser.opera && (this.startContainer.nodeType == 1))) {
      _$jscoverage['core/Range.js'][1907]++;
      var child = this.startContainer.childNodes[this.startOffset];
      _$jscoverage['core/Range.js'][1908]++;
      if ((! child)) {
        _$jscoverage['core/Range.js'][1910]++;
        child = this.startContainer.lastChild;
        _$jscoverage['core/Range.js'][1911]++;
        if ((child && domUtils.isBr(child))) {
          _$jscoverage['core/Range.js'][1912]++;
          this.setStartBefore(child).collapse(true);
        }
      }
      else {
        _$jscoverage['core/Range.js'][1916]++;
        while ((child && domUtils.isBlockElm(child))) {
          _$jscoverage['core/Range.js'][1917]++;
          if (((child.nodeType == 1) && child.childNodes[0])) {
            _$jscoverage['core/Range.js'][1918]++;
            child = child.childNodes[0];
          }
          else {
            _$jscoverage['core/Range.js'][1920]++;
            break;
          }
}
        _$jscoverage['core/Range.js'][1923]++;
        (child && this.setStartBefore(child).collapse(true));
      }
    }
    _$jscoverage['core/Range.js'][1928]++;
    checkOffset(this);
    _$jscoverage['core/Range.js'][1929]++;
    nativeRange.setStart(this.startContainer, this.startOffset);
    _$jscoverage['core/Range.js'][1930]++;
    nativeRange.setEnd(this.endContainer, this.endOffset);
    _$jscoverage['core/Range.js'][1931]++;
    sel.addRange(nativeRange);
  }
  _$jscoverage['core/Range.js'][1933]++;
  return this;
})), scrollToView: (function (win, offset) {
  _$jscoverage['core/Range.js'][1951]++;
  win = (win? window: domUtils.getWindow(this.document));
  _$jscoverage['core/Range.js'][1952]++;
  var me = this, span = me.document.createElement("span");
  _$jscoverage['core/Range.js'][1955]++;
  span.innerHTML = "&nbsp;";
  _$jscoverage['core/Range.js'][1956]++;
  me.cloneRange().insertNode(span);
  _$jscoverage['core/Range.js'][1957]++;
  domUtils.scrollToView(span, win, offset);
  _$jscoverage['core/Range.js'][1958]++;
  domUtils.remove(span);
  _$jscoverage['core/Range.js'][1959]++;
  return me;
}), inFillChar: (function () {
  _$jscoverage['core/Range.js'][1967]++;
  var start = this.startContainer;
  _$jscoverage['core/Range.js'][1968]++;
  if ((this.collapsed && (start.nodeType == 3) && ((start.nodeValue.replace(new RegExp(("^" + domUtils.fillChar)), "").length + 1) == start.nodeValue.length))) {
    _$jscoverage['core/Range.js'][1971]++;
    return true;
  }
  _$jscoverage['core/Range.js'][1973]++;
  return false;
}), createAddress: (function (ignoreEnd, ignoreTxt) {
  _$jscoverage['core/Range.js'][2000]++;
  var addr = {}, me = this;
  _$jscoverage['core/Range.js'][2002]++;
  function getAddress(isStart) {
    _$jscoverage['core/Range.js'][2003]++;
    var node = (isStart? me.startContainer: me.endContainer);
    _$jscoverage['core/Range.js'][2004]++;
    var parents = domUtils.findParents(node, true, (function (node) {
  _$jscoverage['core/Range.js'][2004]++;
  return (! domUtils.isBody(node));
})), addrs = [];
    _$jscoverage['core/Range.js'][2006]++;
    for (var i = 0, ci; (ci = parents[(i++)]);) {
      _$jscoverage['core/Range.js'][2007]++;
      addrs.push(domUtils.getNodeIndex(ci, ignoreTxt));
}
    _$jscoverage['core/Range.js'][2009]++;
    var firstIndex = 0;
    _$jscoverage['core/Range.js'][2011]++;
    if (ignoreTxt) {
      _$jscoverage['core/Range.js'][2012]++;
      if ((node.nodeType == 3)) {
        _$jscoverage['core/Range.js'][2013]++;
        var tmpNode = node.previousSibling;
        _$jscoverage['core/Range.js'][2014]++;
        while ((tmpNode && (tmpNode.nodeType == 3))) {
          _$jscoverage['core/Range.js'][2015]++;
          firstIndex += tmpNode.nodeValue.replace(fillCharReg, "").length;
          _$jscoverage['core/Range.js'][2016]++;
          tmpNode = tmpNode.previousSibling;
}
        _$jscoverage['core/Range.js'][2018]++;
        firstIndex += (isStart? me.startOffset: me.endOffset);
      }
      else {
        _$jscoverage['core/Range.js'][2020]++;
        node = node.childNodes[(isStart? me.startOffset: me.endOffset)];
        _$jscoverage['core/Range.js'][2021]++;
        if (node) {
          _$jscoverage['core/Range.js'][2022]++;
          firstIndex = domUtils.getNodeIndex(node, ignoreTxt);
        }
        else {
          _$jscoverage['core/Range.js'][2024]++;
          node = (isStart? me.startContainer: me.endContainer);
          _$jscoverage['core/Range.js'][2025]++;
          var first = node.firstChild;
          _$jscoverage['core/Range.js'][2026]++;
          while (first) {
            _$jscoverage['core/Range.js'][2027]++;
            if (domUtils.isFillChar(first)) {
              _$jscoverage['core/Range.js'][2028]++;
              first = first.nextSibling;
              _$jscoverage['core/Range.js'][2029]++;
              continue;
            }
            _$jscoverage['core/Range.js'][2031]++;
            (firstIndex++);
            _$jscoverage['core/Range.js'][2032]++;
            if ((first.nodeType == 3)) {
              _$jscoverage['core/Range.js'][2033]++;
              while ((first && (first.nodeType == 3))) {
                _$jscoverage['core/Range.js'][2034]++;
                first = first.nextSibling;
}
            }
            else {
              _$jscoverage['core/Range.js'][2037]++;
              first = first.nextSibling;
            }
}
        }
      }
    }
    else {
      _$jscoverage['core/Range.js'][2044]++;
      firstIndex = (isStart? (domUtils.isFillChar(node)? 0: me.startOffset): me.endOffset);
    }
    _$jscoverage['core/Range.js'][2046]++;
    if ((firstIndex < 0)) {
      _$jscoverage['core/Range.js'][2047]++;
      firstIndex = 0;
    }
    _$jscoverage['core/Range.js'][2049]++;
    addrs.push(firstIndex);
    _$jscoverage['core/Range.js'][2050]++;
    return addrs;
}
  _$jscoverage['core/Range.js'][2052]++;
  addr.startAddress = getAddress(true);
  _$jscoverage['core/Range.js'][2053]++;
  if ((! ignoreEnd)) {
    _$jscoverage['core/Range.js'][2054]++;
    addr.endAddress = (me.collapsed? [].concat(addr.startAddress): getAddress());
  }
  _$jscoverage['core/Range.js'][2056]++;
  return addr;
}), moveToAddress: (function (addr, ignoreEnd) {
  _$jscoverage['core/Range.js'][2085]++;
  var me = this;
  _$jscoverage['core/Range.js'][2086]++;
  function getNode(address, isStart) {
    _$jscoverage['core/Range.js'][2087]++;
    var tmpNode = me.document.body, parentNode, offset;
    _$jscoverage['core/Range.js'][2089]++;
    for (var i = 0, ci, l = address.length; (i < l); (i++)) {
      _$jscoverage['core/Range.js'][2090]++;
      ci = address[i];
      _$jscoverage['core/Range.js'][2091]++;
      parentNode = tmpNode;
      _$jscoverage['core/Range.js'][2092]++;
      tmpNode = tmpNode.childNodes[ci];
      _$jscoverage['core/Range.js'][2093]++;
      if ((! tmpNode)) {
        _$jscoverage['core/Range.js'][2094]++;
        offset = ci;
        _$jscoverage['core/Range.js'][2095]++;
        break;
      }
}
    _$jscoverage['core/Range.js'][2098]++;
    if (isStart) {
      _$jscoverage['core/Range.js'][2099]++;
      if (tmpNode) {
        _$jscoverage['core/Range.js'][2100]++;
        me.setStartBefore(tmpNode);
      }
      else {
        _$jscoverage['core/Range.js'][2102]++;
        me.setStart(parentNode, offset);
      }
    }
    else {
      _$jscoverage['core/Range.js'][2105]++;
      if (tmpNode) {
        _$jscoverage['core/Range.js'][2106]++;
        me.setEndBefore(tmpNode);
      }
      else {
        _$jscoverage['core/Range.js'][2108]++;
        me.setEnd(parentNode, offset);
      }
    }
}
  _$jscoverage['core/Range.js'][2112]++;
  getNode(addr.startAddress, true);
  _$jscoverage['core/Range.js'][2113]++;
  ((! ignoreEnd) && addr.endAddress && getNode(addr.endAddress));
  _$jscoverage['core/Range.js'][2114]++;
  return me;
}), traversal: (function (doFn, filterFn) {
  _$jscoverage['core/Range.js'][2214]++;
  if (this.collapsed) {
    _$jscoverage['core/Range.js'][2215]++;
    return this;
  }
  _$jscoverage['core/Range.js'][2216]++;
  var bookmark = this.createBookmark(), end = bookmark.end, current = domUtils.getNextDomNode(bookmark.start, false, filterFn);
  _$jscoverage['core/Range.js'][2219]++;
  while ((current && (current !== end) && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING))) {
    _$jscoverage['core/Range.js'][2220]++;
    var tmpNode = domUtils.getNextDomNode(current, false, filterFn);
    _$jscoverage['core/Range.js'][2221]++;
    doFn(current);
    _$jscoverage['core/Range.js'][2222]++;
    current = tmpNode;
}
  _$jscoverage['core/Range.js'][2224]++;
  return this.moveToBookmark(bookmark);
})};
})();
