# jQuery noConflict Mode & jQuery Plugins?



## josDesign (18. September 2009)

Hallo,

ich habe jQuery in Benutzung (Version 1.3.2) - Mit dabei sind 3 Plugins (pulsate aus jQuery UI; truncate ein jquery plugin; cycle ein jquery plugin) Alles in allem funktioniert das recht gut. Allerdings gibt es den noConflict-Mode welchen ich setze mit 
	
	
	



```
jQuery.noConflict(); //vor meinem eigentlichem Codeaufrufzeilen
```
 und das Dollarzeichen ersetze ich durch "jQuery". Funktioniert auch ganz gut - aber die eingebunden Skripte sind teilweise nicht für noConflict kompatibel. Ich kenne mich nicht so gut aus im Bereich Javaskript - aber habe gehört das man die Plugins noConflict tauglich machen kann.
Ich frage direkt: Kann mir jemand erklären, wie ich prinzipiell ein jedes Javaskript von jQuery noConflict tauglich machen kann? Muss ich hierfür einfach das Dollarzeichen in "jQuery" umwandeln? Wie sieht das aus?

Mit bestem Dank im Voraus,
jos

PS: ZB. Dieses Plugin, wie kann ich das zB ändern? http://jquery.malsup.com/cycle/jquery.cycle.all.js?v2.72


----------



## Parantatatam (18. September 2009)

Ich glaube, dass es so gehen sollte:

```
var dom = {};
dom.query = jQuery.noConflict(true);
```

Siehe: jQuery > Core > noConflict


----------



## josDesign (21. September 2009)

Ja das schon - aber ich frage mich, inwiefern ich genau dieses angegebene Skript verändern muss? Es gehören ja nur einige Zeichen ausgetauscht, aber welche? Die ausserhalb der Function oder von jeder Function in der Function?

Vielleicht kann mir anhand der angegebenen Datei ein Beispiel gemacht werden - ich denk das ich dann kapiere, was umgeschrieben werden muss.


Mit bestem Dank im Voraus,
jos


----------



## Parantatatam (21. September 2009)

Du veränderst doch nur $ in p. e. dom oder wie immer du deine Variable nennen magst.


----------



## josDesign (23. September 2009)

Ich kann einfach jedes Dollarzeichen gegen "jQuery" austauschen? Auch verschachtelte? Was ist mit Variablen?


----------



## josDesign (23. September 2009)

Verstehe ich es weiters richtig, dass folgender Code von Haus aus schon für den noConflict Mode vorbereitet ist?


```
jQuery.fn.truncate = function (max, settings) {
	settings = jQuery.extend({
		chars: /\s/,
		trail: ["...", ""]
	},
	settings);
	var myResults = {};
	var ie = $.browser.msie;
	function fixIE(o) {
		if (ie) {
			o.style.removeAttribute("filter")
		}
	}
	return this.each(function () {
		var $this = jQuery(this);
		var myStrOrig = $this.html().replace(/\r\n/gim, "");
		var myStr = myStrOrig;
		var myRegEx = /<\/?[^<>]*\/?>/gim;
		var myRegExArray;
		var myRegExHash = {};
		var myResultsKey = $("*").index(this);
		while ((myRegExArray = myRegEx.exec(myStr)) != null) {
			myRegExHash[myRegExArray.index] = myRegExArray[0]
		}
		myStr = jQuery.trim(myStr.split(myRegEx).join(""));
		if (myStr.length > max) {
			var c;
			while (max < myStr.length) {
				c = myStr.charAt(max);
				if (c.match(settings.chars)) {
					myStr = myStr.substring(0, max);
					break
				}
				max--
			}
			if (myStrOrig.search(myRegEx) != -1) {
				var endCap = 0;
				for (eachEl in myRegExHash) {
					myStr = [myStr.substring(0, eachEl), myRegExHash[eachEl], myStr.substring(eachEl, myStr.length)].join("");
					if (eachEl < myStr.length) {
						endCap = myStr.length
					}
				}
				$this.html([myStr.substring(0, endCap), myStr.substring(endCap, myStr.length).replace(/<(\w+)[^>]*>.*<\/\1>/gim, "").replace(/<(br|hr|img|input)[^<>]*\/?>/gim, "")].join(""))
			} else {
				$this.html(myStr)
			}
			myResults[myResultsKey] = myStrOrig;
			$this.html(["<div class='truncate_less'>", $this.html(), settings.trail[0], "</div>"].join("")).find(".truncate_show", this).click(function () {
				if ($this.find(".truncate_more").length == 0) {
					$this.append(["<div class='truncate_more' style='display: none;'>", myResults[myResultsKey], settings.trail[1], "</div>"].join("")).find(".truncate_hide").click(function () {
						$this.find(".truncate_more").css("background", "#fff").fadeOut("normal", function () {
							$this.find(".truncate_less").css("background", "#fff").fadeIn("normal", function () {
								fixIE(this);
								$(this).css("background", "none")
							});
							fixIE(this)
						});
						return false
					})
				}
				$this.find(".truncate_less").fadeOut("normal", function () {
					$this.find(".truncate_more").fadeIn("normal", function () {
						fixIE(this)
					});
					fixIE(this)
				});
				jQuery(".truncate_show", $this).click(function () {
					$this.find(".truncate_less").css("background", "#fff").fadeOut("normal", function () {
						$this.find(".truncate_more").css("background", "#fff").fadeIn("normal", function () {
							fixIE(this);
							$(this).css("background", "none")
						});
						fixIE(this)
					});
					return false
				});
				return false
			})
		}
	})
};
```


Es wären noch einige Dollarzeichen drinnen! Deshalb bin ich etwas verwirrt.


----------



## Anh Nhan (27. Mai 2010)

*$(this).css("background", "none")* musst du zum Beispiel verändern
etwas wie *$this* hab ich aber noch nie gesehen, ich glaube aber nicht, dass es zu jQuery's $-Objekt gehört

EDIT: hab das gefühl, *$this* ist ein jQuery-Objekt. Scheint aber referenziert zu sein (Variablenname in der Parameterangabe), würd ich also zunächst so stehen lassen


----------

