(elem)
| 2454 | |
| 2455 | // 处理粘贴的内容 |
| 2456 | function handle(elem) { |
| 2457 | if (!elem || !elem.nodeType || !elem.nodeName) { |
| 2458 | return; |
| 2459 | } |
| 2460 | var $elem; |
| 2461 | var nodeName = elem.nodeName.toLowerCase(); |
| 2462 | var nodeType = elem.nodeType; |
| 2463 | var childNodesClone; |
| 2464 | |
| 2465 | // 只处理文本和普通node标签 |
| 2466 | if (nodeType !== 3 && nodeType !== 1) { |
| 2467 | return; |
| 2468 | } |
| 2469 | |
| 2470 | $elem = $(elem); |
| 2471 | |
| 2472 | // 如果是容器,则继续深度遍历 |
| 2473 | if (nodeName === 'div') { |
| 2474 | childNodesClone = []; |
| 2475 | $.each(elem.childNodes, function (index, item) { |
| 2476 | // elem.childNodes 可获取TEXT节点,而 $elem.children() 就获取不到 |
| 2477 | // 先将 elem.childNodes 拷贝一份,一面在循环递归过程中 elem 发生变化 |
| 2478 | childNodesClone.push(item); |
| 2479 | }); |
| 2480 | // 遍历子元素,执行操作 |
| 2481 | $.each(childNodesClone, function () { |
| 2482 | handle(this); |
| 2483 | }); |
| 2484 | return; |
| 2485 | } |
| 2486 | |
| 2487 | if (legalTagArr.indexOf(nodeName) >= 0) { |
| 2488 | // 如果是合法标签之内的,则根据元素类型,获取值 |
| 2489 | resultHtml += getResult(elem); |
| 2490 | } else if (nodeType === 3) { |
| 2491 | // 如果是文本,则直接插入 p 标签 |
| 2492 | resultHtml += '<p>' + elem.textContent + '</p>'; |
| 2493 | } else if (nodeName === 'br') { |
| 2494 | // <br>保留 |
| 2495 | resultHtml += '<br/>'; |
| 2496 | } |
| 2497 | else { |
| 2498 | // 忽略的标签 |
| 2499 | if (['meta', 'style', 'script', 'object', 'form', 'iframe', 'hr'].indexOf(nodeName) >= 0) { |
| 2500 | return; |
| 2501 | } |
| 2502 | // 其他标签,移除属性,插入 p 标签 |
| 2503 | $elem = $(removeAttrs(elem)); |
| 2504 | // 注意,这里的 clone() 是必须的,否则会出错 |
| 2505 | resultHtml += $('<div>').append($elem.clone()).html(); |
| 2506 | } |
| 2507 | } |
| 2508 | |
| 2509 | // 获取元素的结果 |
| 2510 | function getResult(elem) { |
no test coverage detected