<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Web Development By George &#187; ie7</title>
	<atom:link href="http://www.webdevelopmentbygeorge.com/tag/ie7/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webdevelopmentbygeorge.com</link>
	<description>ColdFusion, JavaScript and more!</description>
	<lastBuildDate>Sat, 21 Aug 2010 00:16:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Replacement for JavaScript Split</title>
		<link>http://www.webdevelopmentbygeorge.com/2009/04/20/replacement-for-javascript-split/</link>
		<comments>http://www.webdevelopmentbygeorge.com/2009/04/20/replacement-for-javascript-split/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 15:41:34 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[cross browser]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ie7]]></category>
		<category><![CDATA[split function]]></category>

		<guid isPermaLink="false">http://www.webdevelopmentbygeorge.com/?p=55</guid>
		<description><![CDATA[So the other day I was working on some JavaScript processing and it was working great in Firefox.  When I went to use it in IE7 it didn&#8217;t do a darn thing right.  I couldn&#8217;t figure out what was going on until somewhere I read that the Split function wasn&#8217;t the same in all browsers. [...]]]></description>
			<content:encoded><![CDATA[<p>So the other day I was working on some JavaScript processing and it was working great in Firefox.  When I went to use it in IE7 it didn&#8217;t do a darn thing right.  I couldn&#8217;t figure out what was going on until somewhere I read that the Split function wasn&#8217;t the same in all browsers.  That was one of those WTF moments for me, but after some digging I came across a script by <a href="http://blog.stevenlevithan.com/">Steve Levithan</a> that really does the job well.  Since that site is currently down, I&#8217;m including a copy of the file here for people: <a href="http://www.webdevelopmentbygeorge.com/wp-content/uploads/2009/04/newsplit.js">NewSplit.js</a>.  If you want to simply view and copy, here it is as well:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/*
Cross-Browser Split 0.3
By Steven Levithan &amp;lt;&lt;a href=&quot;http://stevenlevithan.com&quot;&gt;http://stevenlevithan.com&lt;/a&gt;&amp;gt;
MIT license
Provides a consistent cross-browser, ECMA-262 v3 compliant split method
*/</span>
&nbsp;
String.<span style="color: #660066;">prototype</span>._$$split <span style="color: #339933;">=</span> String.<span style="color: #660066;">prototype</span>._$$split <span style="color: #339933;">||</span> String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">split</span><span style="color: #339933;">;</span>
&nbsp;
String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">split</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>s <span style="color: #009966; font-style: italic;">/* separator */</span><span style="color: #339933;">,</span> limit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">// if separator is not a regex, use the native split method</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>s <span style="color: #000066; font-weight: bold;">instanceof</span> RegExp<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">return</span> String.<span style="color: #660066;">prototype</span>._$$split.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
varflags <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>s.<span style="color: #660066;">global</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;g&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>s.<span style="color: #660066;">ignoreCase</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;i&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>s.<span style="color: #660066;">multiline</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;m&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
s2 <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;^&quot;</span> <span style="color: #339933;">+</span> s.<span style="color: #660066;">source</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;$&quot;</span><span style="color: #339933;">,</span> flags<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
output <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
origLastIndex <span style="color: #339933;">=</span> s.<span style="color: #660066;">lastIndex</span><span style="color: #339933;">,</span>
lastLastIndex <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>
i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> match<span style="color: #339933;">,</span> lastLength<span style="color: #339933;">;&lt;/</span>code<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">/* behavior for limit: if it's...
- undefined: no limit
- NaN or zero: return an empty array
- a positive number: use limit after dropping any decimal
- a negative number: no limit
- other: type-convert, then use the above rules
&nbsp;
*/</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>limit <span style="color: #339933;">===</span> undefined <span style="color: #339933;">||</span> <span style="color: #339933;">+</span>limit <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
limit <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
limit <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">+</span>limit<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>limit<span style="color: #009900;">&#41;</span>
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>s.<span style="color: #660066;">global</span><span style="color: #009900;">&#41;</span>
s.<span style="color: #660066;">lastIndex</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">else</span>
s <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span>s.<span style="color: #660066;">source</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;g&quot;</span> <span style="color: #339933;">+</span> flags<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>limit <span style="color: #339933;">||</span> i<span style="color: #339933;">++</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span> limit<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>match <span style="color: #339933;">=</span> s.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> emptyMatch <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>match<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Fix IE's infinite-loop-resistant but incorrect lastIndex</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>emptyMatch <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> s.<span style="color: #660066;">lastIndex</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> match.<span style="color: #660066;">index</span><span style="color: #009900;">&#41;</span>
s.<span style="color: #660066;">lastIndex</span><span style="color: #339933;">--;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>s.<span style="color: #660066;">lastIndex</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> lastLastIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">// Fix browsers whose exec methods don't consistently return undefined for non-participating capturing groups</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>match.<span style="color: #660066;">length</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
match<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>s2<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> arguments.<span style="color: #660066;">length</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">===</span> undefined<span style="color: #009900;">&#41;</span>
match<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> undefined<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
output <span style="color: #339933;">=</span> output.<span style="color: #660066;">concat</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span>lastLastIndex<span style="color: #339933;">,</span> match.<span style="color: #660066;">index</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> match.<span style="color: #660066;">length</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> match.<span style="color: #660066;">index</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span>
output <span style="color: #339933;">=</span> output.<span style="color: #660066;">concat</span><span style="color: #009900;">&#40;</span>match.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
lastLength <span style="color: #339933;">=</span> match<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// only needed if s.lastIndex === this.length</span>
lastLastIndex <span style="color: #339933;">=</span> s.<span style="color: #660066;">lastIndex</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>emptyMatch<span style="color: #009900;">&#41;</span>
s.<span style="color: #660066;">lastIndex</span><span style="color: #339933;">++;</span> <span style="color: #006600; font-style: italic;">// avoid an infinite loop</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// since this uses test(), output must be generated before restoring lastIndex</span>
output <span style="color: #339933;">=</span> lastLastIndex <span style="color: #339933;">===</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">?</span>
<span style="color: #009900;">&#40;</span>s.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #339933;">!</span>lastLength <span style="color: #339933;">?</span> output <span style="color: #339933;">:</span> output.<span style="color: #660066;">concat</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span>
<span style="color: #009900;">&#40;</span>limit <span style="color: #339933;">?</span> output <span style="color: #339933;">:</span> output.<span style="color: #660066;">concat</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span>lastLastIndex<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
s.<span style="color: #660066;">lastIndex</span> <span style="color: #339933;">=</span> origLastIndex<span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// only needed if s.global, else we're working with a copy of the regex</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">return</span> output<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.webdevelopmentbygeorge.com/2009/04/20/replacement-for-javascript-split/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
